
Ask HN: Getting back into programming with a hacker’s mindset? - facetious
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.<p>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.<p>I’m looking for recommendations of textbooks, online tutorials, or easy-to-get-to-grips-with open source projects that encourage a hacker&#x2F;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.<p>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.<p>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).<p>Any pointers very gratefully accepted.
======
super-serial
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.

~~~
facetious
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.

~~~
elsjaako
Have you seen [https://projecteuler.net/](https://projecteuler.net/)?

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

~~~
mod
There's some similar things out there:

[http://codekata.com/](http://codekata.com/)

Google "(language) koans"

------
glossyscr
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.

~~~
mclovinit
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! :)

------
headcanon
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.

~~~
facetious
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!

~~~
richardboegli
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](http://unrealengine.com)

------
phodo
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](https://handmadehero.org) [2]
[http://philipbuuck.com/announcing-handmade-
quake](http://philipbuuck.com/announcing-handmade-quake)

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

------
waterlesscloud
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.

~~~
jodrellblank
Sounds fun; what kind of data are you pulling?

~~~
edejong
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.

------
brudgers
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.

------
ehudla
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://norvig.com/ipython/README.html)
[http://nbviewer.jupyter.org/url/norvig.com/ipython/Economics...](http://nbviewer.jupyter.org/url/norvig.com/ipython/Economics.ipynb)

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

------
darkmighty
[http://codecombat.com](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.

~~~
inovica
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

~~~
darkmighty
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.

~~~
inovica
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.

------
mbrundle
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.

~~~
facetious
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!

------
eru
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.

~~~
pekk
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.

~~~
chris_wot
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.

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

------
richardboegli
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](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.

------
fibo
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/](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.

------
nrjames
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.

~~~
facetious
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.

------
chris_wot
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 :-)

------
mark_l_watson
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.

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

------
rajacombinator
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.

------
logical42
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.

------
ehudla
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.

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

------
YashN
Javascript, Python, Elm, Clojurescript, Arduino, FPGAs

------
ShirsenduK
Tryout ESP8266 it comes with hacker happiness.

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

[http://www.zachtronics.com/tis-100/](http://www.zachtronics.com/tis-100/)

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

~~~
facetious
This looks awesome - thanks!

------
RadioactiveMan
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.

------
EliRivers
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".

~~~
facetious
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.

~~~
terminalcommand
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.

------
jodrellblank
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](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.

~~~
facetious
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!

