Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Ask HN: Getting back into programming with a hacker’s mindset?
75 points by facetious on Jan 16, 2016 | hide | past | favorite | 59 comments
I taught myself to code (everything from Visual Basic to Assembly Language) as a teenager in the 1990s, but have had a couple of decades off because life happened. I’d like to get back into it now, but things have changed a lot.

I learn better by experimenting with other people’s code than by a textbook gradually taking me through improvements to “hello world”. I have some ADHD-like aspects to my personality, so I need to see results quickly to be able to sustain my momentum.

I’m looking for recommendations of textbooks, online tutorials, or easy-to-get-to-grips-with open source projects that encourage a hacker/circuit-bender mindset. Arduino seems spot on, but I’m more interested in pure software, especially on a commercially viable platform like Android (although I’ve been a bit put off by the convoluted Android Studio IDE), so I guess Java would be the best language.

I would ideally like to avoid having to learn to navigate the ins-and-outs of an overly involved compiling process, a complicated IDE, or loads of SDKs. I want to be able to get straight to the coding.

There are a couple of things that really interest me, so bonus points if material relates to one of these in some way: agent-based modelling, simple iterative evolutionary processes, and simple AI (e.g. non-instructed collision detection).

Any pointers very gratefully accepted.



Coding without purpose is like eating by using a feeding tube. What's the point?

I've done useless projects at school and at work but the point of those projects was to get credentials or money.

If you're doing this for fun, you should start with something you want to make. A game idea, an app idea, a robot that does something. Break the problem into the smallest parts and start with that.

I also hate complicated compiling processes, bloated tools, or anything to do with configuration. But that's just part of software development. You'll have the motivation to plow through that if you really want to build something.


I take your point but actually, for me, at least in the initial stages, I'm just looking to recreate a feeling from my youth: tinkering with ideas and letting one discovery move me onto the next, figuring out how things work and seeing if I can improve on them. But I think you're right, up to a point, if there was an open source game or robot which was created using fairly low-level programming, so I could enjoy just tinkering with the code without having to learn lots of tools etc., it would be more inspirational than just trying to learn "for the sake of it" with a textbook, so thanks for your perspective.



This is fantastic - exactly the kind of thing I'd be interested in. Thanks very much!


There's some similar things out there:

http://codekata.com/

Google "(language) koans"


This is very true, but note that the same applies to the projects themselves, too.

If a project itself has no purpose (i.e. is just providing a justification to code something), you will 1) experience that the project scope will expand into many directions, leading to an overhelming amount of ideas and work, and/or 2) you will abandon the project early on, after you have written a lot, but before you have learned much. This is usually a demotivating experience, followed by a guilty feeling of not having "finished" it.

You need at least one real user for that project, be it yourself, some friend, or a charity organization. That way, you will find it more easy to limit the project scope and to stick to realistic goals. This will be more motivating and satisfying, even if it ends up not being used in the real world. Along that route, you will probably learn more, and the things you learn will be more useful to you.


I agree. But there is a project every can have, well at least people with a hackers mindset: learn emacs. Start with using org-mode for your your todo list. Org-tables to organize more complex lists and ledgers. Take a side tour of vim. Continue with evil mode.


I was in a very similar situation after I spent decades working as an executive totally forgetting my tech skills I had when I was young. Before I reached 20 I wrote an heavy ERP system and few years ago I was even afraid to touch the shell of a bare metal server (which is btw fun and very satisfying, once you got into it you literally feel the power).

Since I love tech and programming I wanted to get back, not to find a tech job or run a tech startup, no I just wanted something to distract myself after work. So I began dipping into random languages, libs & frameworks. Bought books, read tutorial and did crash courses. I chose popular and new tech, stuff that matters and things which frequently pop up on HN. From mobile development over functional languages to the hottest JS front-end libs. I played around but usually after a few days I lost quickly any interest, I didn't know why.

Eventually I found the best way get back again and it's easy: Look for a real problem you have yourself and you want to solve. Just for yourself, just to use it yourself. Once you identified the problem you search for the right tool and everything else comes by itself and before you realize you mastered a heavy language/framework in a few days/weeks.

Without a concrete mission which really must matter to you all efforts to get into any appealing tech such as Swift, ES6, react-redux, Android dev, Go will feel shallow and you'll end up wasting time going through tutorials/books/guides questioning your journey.


I agree regarding solving problems especially on the real world problem for yourself or your own immediate pain points. I got sucked into a small side project for one of my spouse's clients and although I learned a lot from it, my desire to take my time and really learn and apply deeper aspects of design affected delivery. Not a huge deal since the client is getting it for free and I will eventually find a maintainer, but when I want to swap techA with techB just for the sake of self-interest, I have to think twice since I would be doing so at someone else's expense. Perhaps I should be more cautious when my spouse pimps me out! :)


Cannot agree more with your points. I once thought to explore difference languages can satisfy my curiosity. However it does not work after I run through the official tutorials. I think the key point is to identify a problem and stick to solving it. Along this journey we will find that we have learnt a lot!


My suggestion would be to try out Unity 3D - it uses a language similar to Java (C#), allows you to explore the basic AI stuff you seem to be interested in, and with their tutorials you can see the results of your work fairly quickly and you build actual projects from the ground(ish) up. And above all its fun, even if you're not an artist, or you don't come out with a polished game. If you're using windows you get the benefit of an awesome IDE (Visual Studio), but if not you can still get by pretty well, and Jetbrains is set to release a good cross-platform IDE for C# in the near future.


Thanks for your suggestion - I've had a little look and this does seem spot on in terms of being able to quickly build actual projects. Even though you're far removed from the workings of the computer itself, it looks like you're able to throw yourself into the code without too much preamble. Definitely feeling inspired by this - thanks very much!


Unreal Engine 4

As you have been away from coding for a while, it has a system called blueprint which allows for more visual scripting. As you become more familiar with the environment, you can then start using C++.

http://unrealengine.com


You can check out "handmade hero"[1] or "handmade quake"[2] on the software, game, c/c++ side. Then, you can try a port to java / android.

[1] https://handmadehero.org [2] http://philipbuuck.com/announcing-handmade-quake


I second handmade hero. Lots of good stuff to be learned there.


These look very cool - thanks for the suggestions.


I recently got a SDR (software defined radio) USB dongle, and playing with the data you can pull off the radio spectrum feels like my youth with my Color Computer and assembly language somehow. There's plenty of hobbyist code out there to use as a start, and the more you play with it, the more ideas you get for fun projects.

As far as language, Python is my current favorite. It just has the lowest friction by far.


Sounds fun; what kind of data are you pulling?


Well, I'm doing something similar right now and can really second the parent's experience. I'm getting data from some of our wireless systems in the house, such as our mechanical ventilation unit and our Max EQ-3 heating system.

I've been a high-level engineer for a long time and always worked in a certain top-down approach. It's nice to see the basic stuff again, such as FSK (frequency shift keying), different CRC codes and doing some low-level C++ coding.


These days, it's so easy to just download a package for a language that there's no reason not to try out just about anything that interests you. Python, J, Scheme, Haskell, Ruby, JavaScript, Even Bash is an option.

It's a hobby, there's no reason to start with the overhead of an industrial grade IDE.

Heck you could just download Emacs and spend a long time writing code in Elisp.

Good luck.


If you are looking for cool examples, download Norvig's IPython notebooks and play with them. As a bonus check out this very cool model of economic inequality.

http://norvig.com/ipython/README.html http://nbviewer.jupyter.org/url/norvig.com/ipython/Economics...


Thanks very much - this is exactly the kind of stuff I'm interested in.


http://codecombat.com

Seems perfect for you (in short notice you should be programming little agents to collect resources and other rudimentary AI). It's great for learning.


This is great. My youngest son (8) was talking to me in the car last night about learning to code. This would be ideal for him. Indeed, in just checking it out I somehow ended up doing 5 levels! :) Thanks for the link


You're welcome :)

What really excited me were the multiplayer competitions: they have a ladder where your algorithm will be matched against other players, giving you a rank. You can start really simple (and be at the bottom of the ladder, but there's always someone below you!), and see it rise as you gradually improve it. Unfortunately it seems you now need to subscribe unlock those, but while I wish they went for another revenue system if it interests your kid it's definitively money well spent.


Thanks again. Both of my children are now on it and I actually find it quite addictive too! We really had fun with it this weekend, so appreciate it.


This looks like a great game, but I'm not sure it would give me enough freedom to experiment and actually make stuff. Definitely glad it's out there and looks like a great way to learn.


I can relate to the experience of finding everything is totally different now to how it was before you took a break. I was a self-taught developer who then took a lengthy gap to do a PhD and postdoc. That ran into a dead end, and after much reflection, I decided I wanted to get back into coding. My blog has several posts about this thought process which may or may not be helpful. To cut a long story short, I did two online boot camps (one on Ruby on Rails, one on Swift iOS). The experience of coding with an experienced mentor that I could bounce questions off was really helpful, and I soon got that buzz for coding back. I'm now into my second coding job (as an image data scientist for a London fashion tech startup) and I'm loving it.

Please feel free to reach out if you think any of my experience could be relevant and you'd like to chat further.


Your experience sounds similar to mine. I'm going to experiment a bit on my own first, but I might well take you up on your offer of a chat after a little while. Thanks!


The other commenters made some good points about which technology to choose to hack on. I want to add: find some like-minded people and hang out and hack with them.

Offline, face-to-face is best. But even online works better than nothing.


Seconded. Things have changed not just technologically, but socially. The "hacker" thing is just about dead. A horde of people who do startups to get rich and act like hotshots are consuming its stiffening corpse. It's a completely toxic scene that will destroy the motivation and self-esteem of anyone who came into this out of passion and taught themselves.


Don't look for people who call themselves `hackers'. Look for people who solder. :)


Man, I wish there were some hackers in Sydney who I could chat with about hacking away at LibreOffice :( IRC is great, and the people who hang out at Freenode's #libreoffice-dev are amazing, but what I would do for some actual RT face-to-face discussion...

My wife would also be thankful, because she is the most basic computer user and frankly she doesn't care about C++ classes, pointers, the standard template library, unit tests or anything to do with refactoring.


I can try and see whether any of my coworkers are interested. (I am working in Sydney.)


I'll probably get modded down or labelled a Microsoft shill, but since you have done VBA, I'd suggest having a look at MS Access. Here is my recommendation to someone else who was looking at what to learn: https://news.ycombinator.com/item?id=9910744

C# using Visual Studio is a great next step as the IDE is first class. Microsoft give it away now free.


Hi,

welcome back into programming. A lot of things happened since the 1990s :)

If you want to hack on a minimal dataflow engine, written in JavaScript (but the spec is really simple, it could be implemented in any language), take a look at dflow:

http://g14n.info/dflow/

by now it can run server side or in a browser, but since it is a really flexible spec it could reach also other contexts like electron apps or AWS lambdas.


I say start with Processing. It's a simplified superset of Java. With strong visual feedback, you'll get up to speed in no time. Very simple IDE. All Java is valid Processing. Also, you can make Android apps with it. It's very closely related to Arduino development, too. www.processing.org. Daniel Shiffman's books are great. Nature of Code is free online.


As far as I can tell, you've hit the bullseye here! This looks amazing. The Nature of Code looks exactly like the kind of thing I'm interested in. Thanks very much.


It depends on the language (at least, that's what I found). I'm in a similar situation. I am currently working away on LibreOffice code (I'm also between jobs at the moment...) - but I started with them because one day I was reading their source code on OpenGrok, I was looking for the main function and when I found it I thought, "That a bit messy".

Then, for some reason, I setup their build environment on a VM, setup my git client to push to their gerrit and started making some easy changes. I've focussed on the VCL, which is a core component of LibreOffice, and the more I have read the code on OpenGrok the more things pop out at me. So I tend to submit patches.

Right now I'm reading up on how LibreOffice deals with fonts. It's a bit messy, but the code actually can be refactored, so that's what I'm doing! Actually, it's kind of fun. I rather like running doxygen to see what the collaboration diagrams look like after I've changed the class structure :-)


I bought a Raspberry Pi B recently. You get a Linux system with many pre installed programming languages and an environment intended to get kids/students interested with tinkering with computers.

I even used mine for all of my writing and work for about 5 days. Playing with the Pi brought back some of the freshness of my old hacking/tinkering days.


Thanks for the suggestion. I may well follow your example!


Highly recommend using Python for whatever it is you choose to do. It's very fluid from thought to code without the language getting in the way. When you have a reason to pick up other stuff like Android coding, then you can pursue those.


If you're not hellbent on Java, I'd give Rails Tutorial a try by Michael Hartl. It gets one up and running fairly quickly, end-to-end, without the complications of learning an IDE.


NetLogo is a really easy and fun way to play with ABMs. Once you produce data from your ABM simulation, load it into Jupyter (previously, IPython) or R Studio and explore the data.


I'm actually a bit familiar with NetLogo, but thanks for reminding me! This is definitely the kind of stuff I'm interested in.


Javascript, Python, Elm, Clojurescript, Arduino, FPGAs


Tryout ESP8266 it comes with hacker happiness.


There are some good recommendations here. You might also be interested in TIS-100.

http://www.zachtronics.com/tis-100/

You solve coding puzzles but in a very limited retro environment.


This looks awesome - thanks!


Look into exercism.io; it's a pretty cool way to solve problems while people provide feedback on your code. Better still, you can review other users' solutions and see how you could have done better.


Cross out the word "hacker", because it's become so used and abused that it's now a filler word; it means something different to everyone. Some people define it as "person who can write a computer program", some people use it in the Stevn LEvy sense, some people use the ESR definition, some people just use it to mean anyone who is unconventional. It has become a phrase that means a different thing to everyone who hears it, without even realising it; much as when a politician says "our common values", and everyone interprets it differently without realising it.

So tell us what mindset you mean, without using the word "hacker".


Fair point. What I mean by "hacker" may well be different from what other people mean. I just mean a mindset which some people may think reckless but that others may find exhilarating: tinkering with something, trying to figure out empirically how it works and how you can improve on it, while ignoring learning all the theory and sensible basics until/unless you find you need to understand it to get past a particular obstacle. Probably not a good way to build a career, but great fun to a certain kind of person (like me). It's what I used to do as a kid, and I had great success with it. I'm hoping it's possible to replicate in some aspect of modern computing, but I'm put off by the layers of systems and tools and SDKs that I get the impression are involved in most programming these days. So I'm looking for a context in which this kind of "hacker" (to me) mindset might still be alive and well.


I can understand what you're saying. If you've programmed with Visual Basic and assembly you're already familiar with most of the concepts. I would suggest looking at the website learnxinyminutes.com. It will give you an overview of current languages. As you haven't been programming for along time I would suggest picking up a language that is easy to setup. I would recommend perl, after a short introduction you can download and install every module you like from cpan.org with a single command and start solving puzzles.

Coming from Visual Basic and assembly I think you will struggle with object orientation and functional programming at first.

My advice get a Linux machine or vm, install cpanm. Have a look at perl at learnxinyminutes and start coding. You could write a script with WWW::Mechanize that scrapes news from HN. BTW I am currently fascinated by win32 assembly programming and reverse engineering. Your old-school knowledge is still valuable. Continue reading HN and coding fun projects. You'll catch up in no time.


The word "professionally" suffers from the same ailment. To some, it means that you earn your living with it; to others, it is a measure of quality. And what 'quality' means also differs from person to person...


The site we're on is an informative reference for this particular meaning of "hacker".


Yet there are people on this site who define hacker as "person who can code", which was a real eye-opener for me.

https://news.ycombinator.com/item?id=9790316


You want to get straight into coding, but instead what you're doing is posting on a forum for a discussion for recommendations for a tutorial? Are you also scheduling a meeting to discuss the procedure for gathering a committee to plan lunch? ;)

I mean, I don't think you're deliberately being misleading, but it feels a lot like you're saying one thing, yet doing another. Just out of curiosity really, why haven't you already Googled and started - what are you holding off and waiting for? It would take, what, 10 minutes to Google a Java tutorial and open https://repl.it/languages/java and get some text printed, right?

I learn better by experimenting with other people’s code than by a textbook [..] I’m looking for recommendations of textbooks

mmhmm.


It was all part of my dastardly plan to get inappropriate advice by misrepresenting the way I learn! But I have failed miserably, because all these people gave me really helpful advice... Seriously, though - yeah, I am definitely someone that sometimes overthinks things, but that's actually worked out pretty well for me in life, so I'm quite relaxed about it. So, yes, I do basically much prefer the idea of getting a tutorial that's perfect for someone with my mindset by trying to find other likeminded people online before I get stuck in rather than just going for the first tutorial I find on Google. Sounds like that's not how you would do things, which is fine. Different people work in different ways, I guess!


What's to say he isn't also doing that?




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

Search: