Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: My son wants to make side money programming
39 points by Vivtek on Jan 19, 2015 | hide | past | favorite | 56 comments
My son has had a little programming experience, and I used to (back when Perl was cool), but it's been a while. He's essentially a tabula rasa, but smart and sometimes motivated. He's 15, thus I think the ideal age to start.

What language(s)/platform(s) should he learn, and where should he look for freelance work? Ideally we're thinking of online venues; we're temporarily in Budapest and there are already plenty of hungry, vastly intelligent, obsessively motivated people here, so the local market is probably not ideal, although I'm not discounting it. (There's also the fact that we won't be here forever.)

To his benefit: I can teach him whatever he needs to know. Well, we can co-learn it, but it's still better than hacking in the dark.

What do people here suggest?

Hey, I work at a startup in Budapest (allmyles.com), I'll ask the team if we could teach him a thing or two by passing off some work. We mainly work with Python, and having him around (office is next to Deák Ferenc tér) might prove fun for all of us. Remote works for us as well, of course.

Disclaimer: We're rather bootstrapped, so I can make no promises. (Jeez, we might not be able to afford a 15 year old programmer.) An even larger issue might be that I think it's illegal to give work to anyone under 16. I'll have to ask around and if you send me some contact info to bence.nagy@allmyles.com, I'll get back to you once we've got things figured out.

He'll be 16 in March, and is a dual citizen. I think you're legal - and that would be absolutely fantastic. He's fully bilingual and has a bus pass. :-)

I'll take a different tack.

In my world (data) there is a lack of developers - or just people of any kind - with sound understanding of the relational model and its (only relatively correct) implementation, SQL. SQL is a very declarative language, high level and intuitive and easy to write correctly. With a good RDBMS, it's also easy to optimize when you are resource constrained.

And literally EVERY company out there has a database that needs to be queried, reports that need to be put out, databases that need to be normalized, data warehouse schemas that need to be drawn up, data sources to be joined together, questions that need to be answered and relatively few people to do the work.

I would say start with bases in set theory and logic in parallel with C. J. Date's books (which are easier than Codd's original paper as a starting point). An additional benefit of starting there is he's less likely to shoot himself in the foot with ORMs later on.

Regarding where to look for work, talking only about Singapore and ASEAN companies, I get contacted several times a week by agents, headhunters, and executives from local companies who have these problems. I can't speak for Europe, but here, a cold approach or a well formed reply to a job ad with "data analyst" in the title offering cheap ("because 15") but high quality remote work might work.

Yeah, I was planning on drilling him on database concepts. You can't start that too early. The trick is getting him focused on a real problem first and showing him databases in context.

Absolutely agree on this point. What got me interested in software development was having some problem to solve/goal to accomplish.

SQL is a very practical skill for every developer to have, but I think it would take quite an exceptional 15 year old to be able to stay interested in it long enough for them to become useful. I would at least encourage them to learn another language alongside it.

I learned it alongside learning about how Rails' ORM worked and it made it much easier to stay interested (I still hate hand writing SQL though). It had the nice benefit of helping to really understand what was going on in the ORM and at the DB layer. At that point you can safely avoid abusing the ORM and creating terrible queries that might otherwise look readable and concise at the application layer.

You got that right.

I've never taken SQL seriously, I always find it to be a huge PITA and for the small projects I do, I find it makes more sense to just use an ORM and if I ever write something with thousands of concurrent requests I figure I can flesh that out as it comes.

Why is what you're saying the better solution for someone just starting? Isn't it better to build up, rather than jump into something for which he will see little reward for in his personal projects? His son might not work in an environment where his skills have tangible benefits until 10 years from now.

I wasn't a programmer (finance background), and I learnt enough SQL to be useful in perhaps 20 minutes. Reading just one Date book [1] took me a further 3 days and allowed me to solve pretty much everything I've encountered since, with the occasional googling for syntax. Aside from perhaps statistical learning (reading through ISL [2] takes perhaps half a day to a day if you are committed, another day for the labs, and then you are immediately useful to most SMEs), I can't think of a field in computer science that has such a fast ROI. Both being able to query well, and being able to build simple but accurate statistical models, are valued quite highly by the marketplace right now and naturally lend themselves to a "contractor" relationship. The OP mentioned making money...

SQL is declarative which means if you can word it in your head, you can write the query (unlike with OO where you need to define what happens to your record). If you learn it properly, from the set theoretic perspective (aka the relational model, not using the RDBMS as a data dump without FKs, and treating rows as records the OO way), you can keep working like that almost indefinitely, and the problem solving is a lot of fun - "how can I define my output in terms of my input in one go". Most importantly, you KNOW your code is correct (except logical errors) whereas the ORM does not guarantee as much (my first step when at a new company that uses an OO framework is enforcing all the implicit FK constraints and keeping track of the 1-3% of tuples missing bits). Most of the time it (sort of) doesn't matter (click through rate being off by 0.2% isn't going to change your life); when you're calculating how much money you donate customers via discounts or matching your orders with cash flow, it does, and this is when companies start paying good money.

Unfortunately, based on interviewing 200+ applicants over a couple of years to data-related positions, I've started to think that the relational model is simply not taught anymore, and many popular frameworks actively encourage patterns that break the model (e.g. polymorphic associations in RoR [3]). I'm now happy just to see someone aware of why constraints might be useful, let alone being able to discuss 2 vs 3 or 4 valued logic or the usefulness of prenex normal form.

[1] SQL and Relational Theory, C. J. Date 2011 [2] http://www-bcf.usc.edu/~gareth/ISL/ [3] http://stackoverflow.com/questions/922184/why-can-you-not-ha...

My girlfriend does work for her data management team in an industry which doesn't appear to pay well. Could I ask your advice on which companies or keywords she should search for to potentially find a new data management position?

I've seen only three ways to make decent money in a still-technical position:

1. management (deciding what gets done and supervising it), in this case being the interface between the pure managers with MBAs and the developers, like the gearing mechanism between the stick and the engine (this is pretty much where I sit);

2. specialization, your unix-bearded database sysadmins who can do wonders with the most constrained resources, think someone who actually worked on building Postgres/Ingres since the 80s, because some institutions like banks do need that kind of talent and they can name their price; I mention beards because when I did look for such a profile, every applicant with one exception was in his 40s or 50s and wore a large grey beard;

3. crossing over to "data science" (which is the bubble word of the day, and where a lot of the fast money is), i.e. picking up skills in statistical learning and applying them to company datasets. It's still 90% getting the data into the shape you want. I used to think this field was the preserve of the PhDs, but most companies I talked to at least in Asia have almost no capability on that side of things (not even for questioning the assumptions and significance of their financial models). I also saw that Andrew Ng said much the same thing in his Coursera lectures, something along the lines of "by the time you finish this course you'll be more competent at machine learning than most data scientists I've met in the Valley" so I suspect this extends to the US.

They're sort of related: you want to know about things like the innards of database engines anyway for anything beyond trivial select operations (2.); you need to be aware of what upstairs wants in order to do a good job as an analyst (1.) and you'll naturally start questioning the requests that come to you ("why are you asking me for this data, what problem are you trying to solve, what assumptions are you making") which is where 3. comes in. That's the most valuable part to the company, but also the hardest politically.

I think mixing these things in an SME setting where you can have a fast impact is where you have the highest ROI as an employee (and thus highest likelihood of good money). Big corps, despite being able to offer great salaries, are so slow and bureaucratic that it is very hard to make a meaningful impact - cue in stories of no company email account for months, datasets shared in Excel because database access can't be given for "security reasons", and the utter lack of accountability that comes from 7-layer middle management structures. Startups (pre-revenue/profitability) are too small to be able to afford, or get much return, on a data scientist type.

Python. Fullstop.

Is he interested in games? Make him implement a roguelike, or study Panda3D, if that's where he leans.

Does he like to design UX? Use one of the wonderful web frameworks (my fav: Django, but also tornado, Flask, Pylons) and do some webdesign.

Useability applications for the Desktop? https://wiki.python.org/moin/GuiProgramming more frameworks than you can shake a stick at.

Best calling card you get when looking for work is pointing to what you built. Rent a DO dyno and post the work there. Showcase cool stuff.

Yeah, he's so interested in games his English homework is League-specific. (Ever written League of Legends poetry? It's actually surprisingly possible...)

We did some text dungeon stuff last year and that almost clicked. But the boy is mercenary. He washes dishes in Vermont in the summer - when I mentioned that money was to be had with programming, he sat up straight. I think he'd never thought about it seriously.

I'm trying to get a sense of "If I were just starting now..." from the community. And yeah, Python does seem to be ranking rather high, doesn't it?

Not long ago one of our customers asked us the same for his son (also 15). We pointed him to game programming with Unity3D. Unity has Python (Boo Script), JavaScript, and C# styles of scripting. With little work he'll see big advances, this will keep him interested. After learning the basics, he can jump to webdev or other fields...

There's plenty of resources for leaning Unity online, on youtube, udemy or elsewhere... https://www.udemy.com/courses/search/?q=unity3d

PS: In 4 months the kid has already sent us 2 games fairly complex and funny.

I tried Unity while @uni. I liked Boo but I disliked the Unity API. It might have been a case of not understanding it properly. I was using Panda3D around the same time and managed to make a game with that.

I started along the same path 12 years ago, so I can share my experience.

* I started with PHP. My suggestion today is to start with Django (Rails is fine too, but Django has less magic and so things are lot more explicit)

* Bootstrapping out of nowhere is difficult. He will have a lot to learn from the knowledge perspective. So, looking out for opportunities, negotiating payment etc. can be draining. This is where you can help so that he focuses on learning his craft first.

* It will be tempting to work for free. Advice him against that. He can work for a low fee, but getting paid puts the work in the right context.

* Stay away from portals like Elance and ODesk.

* Working as an intern at a company would really help him with the other meta aspects like planning, team collaboration etc. which are all important to pursue his long-term goals.

It seems like almost everybody who replied is a web developer, and assumes your son wants to build websites. Let me suggest something different.

Figure out which part of programming he's interested in, why he likes it. Is he good in maths/physics, does he want to write games, websites, apps, etc.

If he's just interested in "programming" in general, get him a nice book on algorithms and suggest different languages he can use to implement them (something C-like, a scripting language, a functional one, a modern Lisp dialect).

Oh right, get him to use Linux or BSD, as that will give him access to a ton of free development tools. I also mention free because I don't think he should focus on making money at 15, but find something he enjoys learning. If necessary, you could provide incentives to learn this properly, instead of following possibly short-lived market trends.

Generating money from programming is hard, really hard. I'm a professional developer (though a junior one) and I can't find ways to do it reliably.

If it's still interested in programming, here is my list of languages :

- Desktop : Python obviously. You can make little graphical interfaces, easy scripts, manipulate data in Excel or Word, even some remote automation since there are network libraires.

- Web : I would recommand against full-blown web frameworks like Django or Rails. Start small by using some simple static sites using HTML+CSS and then learn to build dynamic ones using PHP and Javascript.

I would also add that there are others ways to make money than programming : I know a 17 y.o. which rigged up a farm of Minecraft servers for his highschool and he's being paid by his classmates for the hosting.

How much does your son want to do programming? Does he do it for fun already?

What other interests does he have? Are there parts within these interests that could have relevance for programming? For example he might like bird watching, so perhaps a mobile app for birding might be good, or he might love platformer video games, etc etc.

In short, he should do what he is interested in, don't worry about the choice of technology - by far the most important thing is that there is some interest, passion and enthusiasm. The choice of technology is less important than the choice of what to do.

It depends on why he is trying to make money, and how quickly he wants it. But if this is the start of a long-term career plan, then I suggest doing some small projects for free to learn more skills and build a reputation.

If those projects go well, he will quickly get referrals to do more, and then he can charge. On the other hand, if they go badly, people don't feel like they lost money, and instead will feel that they gave a 15 year old a chance... and may even give him another one when he is 17.

It is amazing how quickly expectations rise alongside bill rates.

If he wants to do freelance work, I suggest browsing job boards on university websites or on facebook. There are always lots of people looking for part time developers there.

But as an alternative to freelancing, I'd recommend making a little useful app and selling it on the web or on one of the app stores. I make Mac software, and there's a big market for useful utilities on the Mac App Store. The hardest part is probably coming up with ideas for apps; when you're 15, you just don't have a lot of experience with the kind of problems people have.

Here's an idea for a simple app, to illustrate what I'm thinking about: Make a CSV file converter that can convert between comma-separated-files and semicolon-separated files. If you add hungarian localisation, you even have a unique selling proposition.

As for what programming languages to start with, I'd probably pick Objective-C / Swift if your on the Mac, and C# or Java if you're on Windows, and C++ & Qt if you're on Linux. These languages are popular, in high demand, will probably still be very relevant in 10 years, and you can quickly get an internship in many companies if you have basic knowledge of those.

Why? Native development has a bit steeper learning curve than web development, but in general the tooling is better (IDE, documentation, etc) and there's less competition.

I'd recommend this book and the bootstrapping community in general:


He could probably do ok with Ruby on Rails, Django, Node.js or something like that.

15 is late -- by mainstream reports, at that age you're either a billionaire already or you're never going to make it. </joking>

Back in my days, I'd have built websites for friends and some would turn into (badly) paid gigs. If he's got other interests (sports club etc) they could become engagements.

If really he wants to do websites, you'll have to start with JavaScript/jQuery, then graduate to server-side (node, PHP, Python/Django, Ruby/Rails, pick your poison).

Consider that the real dazzle these days is mobile, and it's not that much harder than making websites (or he can make mobile-optimized websites, which can be almost as cool). It might be easier to get engagements on that side at the moment, since most people/clubs/businesses already have a website but they likely don't have an app.

My goodness, I was 17 when I was first introduced to programming, punched card FORTRAN "IV" on an IBM 1130 ^_^ (academic year 1977-8). Which I found to be very neat, but sufficiently frustrating that I went straight to my local college's library (the machine was hosted at the college).

In general, I agree with those who say that at this age he should play around with stuff he find interesting, and FOSS and Moore's Law makes that inexpensive. In the next summer wandering around the file system of a UNIX(TM) V6 computer for undergraduates went hand in hand with playing the Colossal Cave Adventure game. I learned enough UNIX(TM) from that, e.g. that system had a DECtape which started me on backups, which for some reason I find to be fascinating, to be employable when I was "dumped on the streets" in 1980....

If he is interested in web development I think Khan Academy is a good place to start (https://www.khanacademy.org/computing/computer-programming)

Great teaching lessons and lot of jobs around the world for the web

There's contract work - like creating little websites or web apps for people. So, learn things like Wordpress, CSS, Javascript, image editing, to start.

If I were him, I would first ask around - family, local businesses, organizations, etc. to see if someone needs a website or internal database or something like that, and then learn what you need to learn to do it. Another option might be to find groups or small businesses or individuals that do coding and see if he can learn from them and help out.

What I wouldn't do is just try to learn programming for its own sake - such as taking a course or buying a book without any idea of how it might be useful. He'll just forget it and perhaps even decrease his interest in programming. Flip it around and find a project first, a reason to learn programming.

Yes, I've tried the learning programming first route on him. Last time it almost clicked. Finding a project first is exactly what I think will work this time.

Do your son show interest on programming? Or you as a father (and knowing more about the market) want him to become one to increase his probabilities of a stable life?

My personal opinion is that JavaScript is the most fun and the most versatile. For example if he is into making games, creating HTML5 games with JavaScript works very well.

Not sure what is best for generating money.

But for learning, starting with a personal project (like a game) tends to work well.

Love an entrepreneurial spirit!

Bust first, some comments/questions:

- Programming is too broad. I would sit down and get him to think through what he means when he says "make money programming." This can go in a lot of directions (games, setting up wordpress sites), SEO, data scraping, etc.

- Get to know the local ecosystem. Check http://www.3cosystem.com/budapest to see what meetups are coming this month. (Disclaimer - 3cosystem is a pet project of mine). Go to those events and ask the same questions here. See what is in demand. See who is making money locally and abroad.

- I just checked, and there are quite a few events coming up this month. That is a good opportunity for both of you!

Good luck!

Holy schemoley, I really didn't expect so many events in Bp. Thanks!

You are welcome! Please bookmark it or add it to your home screen as I'm really hoping to get people using it day-to-day.

Yes experience is important. I'd say "software development experience = spending time hitting walls".

So find an interesting wall, and let him spend time on hit. For me the interesting things where thrill to see the computer do things, but for others that may be a paycheck.

Do not make cheat time by arranging or buying stuff, except for maybe a laptop. The time consuming obstacles motivated me a lot, i spent more time and effort in learning than i would have otherwise. I went through several programming books that way, just to satisfy my curiosity. Not deliver to some boss.

Later, ofcourse i descided to work for a boss, but by then i discovered what exactly i really found interesting.

Learn programming fundamentals through TopCoder and HackerRank, which have programming puzzles and teach algorithm and data structure fundamentals

Then also get involved in an open-source project, just keep looking for interesting subjects and find one you like. Programming is more about managing projects, and it will give you something to put and talk about on your resume, and meet new people, and lead to jobs

Everything you need is online. "Pick a job and become the person that does it" - Mad Men

Python, specifically winpython 2.7.x You can see variables in the Variable Explorer and ipython is the default shell. Easy to install packages using the WinPython control panel.

Download it at https://winpython.github.io Windows packages at http://www.lfd.uci.edu/~gohlke/pythonlibs

If it's solely for the purpose of making money (as opposed to learning for the challenge/curiosity) then do some research: freelancer.com, odesk etc etc. I'd check which technologies are in demand and go from there. It's also important to play to your strengths, for instance i find web development very finiky, i tend to excel in more meaty things like transaction processing. hth

I started at 15 (15 years ago). Although today I am a Python guy and generally a little anti PHP. I think that the ease of PHP with web servers translates almost immediately with beginners. It will teach him to search for what else is out there. Plus if he is going to be doing little church/synagogue websites, he start to grasp HTML/CSS/Javascript at the same time. Same way I started.

Maybe you guys should offer wordpress services for setting up websites. Then you would be:

1. working within a large piece of software (learning)

2. up and running fast and feeling good about making progress

3. able to use google to resolve more of your issues since stackoverflow and many blogs talk about the common beginner mistakes

4. have more customers up front (since money is the motivation) where many people are willing to pay for wordpress setup and management

Isn't the market saturated for Wordpress? Where would you even market that? Like I say, locally is a weird situation for us; we're Americans in Hungary. (Well - he's got double citizenship; my point is that as perceptible foreigners I'm having troubles seeing a good selling strategy for that.)

Honestly, if the lad's driven and 'wants to make side money programming', he should be curious enough to ask this question. I find it weird that people are suggesting SQL or Swift or Python, without even knowing what he's like. Maybe he likes microcontrollers. Who knows!

That you can mentor him is great but programming needs an innate interest. You can't really do his homework.

Honestly, I see him in management pretty soon. He's amazingly good with people. He's not yet good with people he doesn't know - it costs me nothing to ask for good platform recommendations on a site I've frequented for years, whereas for him, posting this question here would be a real hurdle. He'll grow out of that pretty soon; the trendline is pretty obvious at this point. In the meantime, I've got some interesting things to get him started on.

He could also try building something... I'm always trying new ideas like my latest : GlitterAndPoop.com -- a clone of the ShipYourEnemiesGlitter.com site, don't know if it'll make money, but took 3 days to build--and everything on your portfolio makes you look better and better.

I suggest he start with creating his profile at odesk.com and freelancer.com . Initially, he needs to apply for smaller projects and at significantly lower prices than the other bidders. He can build a good portfolio and start moving to bigger and paying clients.

He could start with web development initially. It's the fastest way to get going. Then move to other subjects like algorithms, machine learning, Big data.

Ask him to build some stuff which can solve some real world problems that he faces in every day life. If other people also face such problems, they will pay to use his tools.

Good Luck

It does not matter what language. Focus on value creation.

Programming is very competitive market. Python is probably good choice for first language. Together with programming language I would recommend to learn some database, perhaps Cassandra, RethinkDB or SQLite.

A lot of kids start with Wordpress customization or selling themes on ThemeForest.

KISS: Python, Ruby or PHP, Django, Rails or Yii.

If any of those take the world will be his oyster.

Don't forget Laravel, one of the largest PHP MVC frameworks and communities around, definitely a good choice to get started, tons of great packages too (checkout Packalyst.com)

Don't count out C# and SQL via SQL Server because C# runs everywhere and has got the proper tools to support it running everywhere (mobile, web, desktop) and SQL Server because it's the easiest to start using with C# if and when you get to that part...

Other languages like Python, PHP, Javascript etc. need to be shoe-horned into their mobile, web or desktop environment and don't have really good tools for one environment or the other. Furthermore, those languages come from the open-source world, the "Bazaar" if you will and they're simply not engineered as well as an industrial language like C# or Java.


The money is in mobile right now, and for the foreseeable future. Try Java for android too. In a couple of years he'll be making good money without leaving home.

Or anywhere in the world for that matter.

There is money in mobile games, but not for the independent developer. And it would not be easy for a 15 year old to get hired into a large mobile game development house.

A $450 Seiki 50" 4k display makes an excellent teaching tool. It's so large you can see code from a higher elevation so to speak. Visualizing and "seeing" how a script flows become much easier. You can stand by the display and point to how a function call executes the code where the function is defined and things like that.

This is the stack I would set up with, optimized for ease of use, elegance, and market demand:

Debian sid or Ubuntu

Tiling window manager


Python flask on the backend

Bootstrap on the front end.

A hacker that is comfortable with Linux and the command line, python, html, css and js can find work anywhere.

> .. ease of use, elegance ..

I wouldn't put Vim or ubuntu on either of those for a somewhat beginner.

How about, sublime and some web server like AMPP. That's way easier to get started with. Literally no friction.

You've got to start somewhere. More often than not you start with the easiest option and find that you're knee-deep in crap a ways down the line. If all you care about is ease-of-use over learning opportunity you might as well default to Windows with whatever flavor of Visual Studio you can get.

You are right that would be no friction at the start but I would argue there will be more friction later when he wants to build something more complex.

Linux cli and vim and a tiling window manager have a learning curve (mostly remembering keyboard shortcuts) but they are actually far simpler tools with less distractions and more straight forward and robust tooling.

I just taught a completely non technical 30 year old to build static html sites with the above setup. They appreciated the minimalism of having the screen split in half with code on one side and chrome on the other and no docks or menu bars to distract. They picked it up quickly.

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact