
Can one get good at programming while working as a programmer full time? - monush
My weird question needs context.Here&#x27;s my story. I learned how to program early in high school and made some interesting things, like a parser that turned text files into text-based adventure games and a framework for making tile-based games like chess, go, and nethack. When I was 15 though, I turned away from programming and went into physics in math because while I found programming to be &quot;fun&quot;, I thought science was more fufilling.<p>In college, I majored in math and physics and went hardcore into wannabe academic mode, but in my senior year I realized that I actually like programming more. Fortunatly, I had enough CS classes &quot;just for fun&quot; racked up that I&#x27;m going to be escaping college with a degree in CS. I&#x27;m not a good programmer yet. I have OK fundementals, I know what I need to do to get better, and I know that im smart and motivated, but im just not good yet. The coolest thing I ever wrote in my life is the parser I mentioned above.<p>I have a job lined up at Bloomberg. Im going to be an overworked software grunt at a second tier firm. Im unsure if it&#x27;ll be possible to learn all the things im interested in while working at such a place, get good, get recognized, and then move on to doing startups or working at microgooglezon. It seems to me like everyone I know who is good at code got good by the time they were my age, in the bastion of infinite free time known as college and high school. Input? Advice?
======
JackMorgan
I was just like you, only I was just lazy in college and high school.

Now, I take the train to work, and try to keep up a github streak with
projects and learnings. I suggest you download SICP, and try to get done one
exercise a day. If there is too much reading to finish in one day (I only
spend about 25 minutes a day) then type up the sample code and a paragraph
about what you read, and commit that.

The streak is a powerful motivator.

[https://github.com/steveshogren](https://github.com/steveshogren)

The trick here is SICP is easy to start and stop, and by chapter 4 you'll have
a huge amount of general purpose programming skills. Don't let the lisp scare
you, SICP is the best JavaScript/PHP/Java/C#/Python/Ruby book I've ever read
(assuming you already know the syntax of those). Once you've put some good
milage on that, you can mix in other great books too. The goal here is to
build up your skills slowly over years, not cram over weeks. Just like lifting
weights or becoming a world class musician, becoming a world class developer
takes dedicated time and deliberate practice.

I've been sailing the good ship Github Streak for 300+ days, and in just that
time I feel like I've doubled my skills and speed. The best part? It's not
just SICP, I've done a half dozen great books in that time (25 minutes a day *
300+ days adds up fast) and I have no intention of stopping.

Message me if you have any questions, I'm always happy to help a fellow person
on the journey to being a better developer.

I wrote up a longer form here: [http://deliberate-
software.com/streaks/](http://deliberate-software.com/streaks/)

~~~
japhyr
I'm curious, you ended a 330-day streak two days ago. Did you intentionally
end the streak, or did something keep you from committing? Or maybe you commit
locally and just haven't pushed the last few days' work?

I think the decision to end a streak can be as important as the decision to
start a streak. Consistent work is good, but work out of a sense of obligation
can hinder progress. I accidentally broke a streak a while back, and it was
really freeing to not feel like I had to make a commit every day.

~~~
JackMorgan
I haven't pushed. That is the benefit/detriment to coding on the train: no
internet. Right now the streak is still valuable and not oppressive. As long
as I'm taking the train to work and have a working laptop it's not hard to
keep up, perhaps if things change I'll consider ending it.

I think there is some obligation, but usually I only feel that about the book
or project, not the streak. I did about a month solid of SICP, and last week
started to feel a little burnt out, so I started a "for fun" project to help
take the edge off. I'll do that to "recharge" until I'm feeling more energy to
tackle the next minor section of SICP.

------
batoure
Something I feel that has somehow not yet been addressed by this thread is
surroundings.

I initially came to CS with an undergraduate degree in a humanity, this has
(despite some years of good achievement) left me with with a constant fear of
being left behind in irrelevancy. This has made me always look at my current
employment as wondering if it furthers my CS narrative.

Thankfully for the time being unemployment in CS is pretty low. Treat your new
job as a chance to harden some of the skills you have been learning. But the
most important thing you can do is find the next RIGHT job, I have found that
the most consistent way to improve your skill set is to work places where you
feel like you are the dumbest person in the room and wonder why they gave you
a chance. When you don't feel that way any more, it may be time to leave
(assuming learning and growth is your number one priority).

Ultimately what that rambling paragraph gets at is... if you aren't learning
from your job then you are losing out and you should leave.

Think about working actors in Hollywood these are the actors you recognize in
almost every movie that are constantly recast to play basically the same
character in a story. At some point in their careers they got type cast and
the only way that they can continue to make money is to work as much as
possible. If your goal is to continually grow as a programmer you have to
figure out how to be the A list actor who is always surprising people.
Developing a narrative that showcases your intelligence and adaptability is
the most important thing you can do right now.

~~~
JackMorgan
This is really good advice! For my first three jobs, I ended up leaving just
as I started to feel a deep mastery, roughly two years in. All were really
different and I felt like I had to scramble just to not get "caught" in how
unprepared I was. Every one of my jobs since has been like that, each one a
big move up in complexity, pay, and skill of my teammates.

As soon as you are the best developer on your team, chances are you'll get
comfortable and stop growing. I think the most important skill I have right
now is a powerful flexibility that comes from a broad set of experiences
working in a variety of languages, frameworks, and domains. In six years I've
written and maintained code professionally in: Perl, Java, PHP, Python, Ruby,
VB6, VB.NET, C#, and F#. And I've worked in banking, educational kids games,
magazine printing and sales, event tracking, and school financial aid.

It's easy to think you're flexible and adaptable if you've only ever learned
one language and you are comfortable where you are. I've known and hired
developers who were supremely confident in their adaptability (but only had a
lot of experience in one place) who, upon moving from a "level 1" job in x
language to a "level 2" job in y were broadsided with things as simple as
syntax, in some cases quitting to go somewhere else to make less! Or like one
guy I worked with, he loved Python and would constantly talk up how great it
was and better than .NET. I finally said, "great, I love Python, let's do
something in it!" We got about twenty minutes in when he realized Python is
duck typed and decided Python sucked.

The problem with both of them is they'd really only ever worked in one
language doing things one way for the same amount of time I'd worked three
different jobs, and they didn't know how to adapt and be uncomfortable.

------
AnimalMuppet
The thing is, "everyone you know who is good at code" is mostly people your
age. So, yeah, they got good by the time they were your age. But that's just
an artifact of the sample set.

No offense, but those people who are your age who you think are good, well,
they mostly aren't that good yet. They may be good enough to hack something
out for a startup. The startup may even take off. But for building
maintainable code that can sustain a company for the long haul, they probably
need to learn a few more things...

~~~
monush
This...makes a lot of sense. I'm not sure why the idea didn't occur to me
before--I guess its hard to reason logically when you're disturbed by
something emotionally sometimes :P. Thanks.

------
Piskvorrr
First off, programming is a Red Queen Race. Anyone deciding "I'm good at
programming _now_, it's going to stay like this forever" is sorely mistaken.
Without continuous improvement, programming skills are at least _stagnating_
\- not good when the rest of the universe is _evolving_. So, "getting good at
18" is no guarantee of anything.

Also, there isn't a programmer encompassing _everything_ \- so I'd suggest, in
your free time (of which you may have less, I admit), starting a hobby project
(or joining a project) which would be radically different from what you're
doing as a job. E.g. doing web frontend coding? Try low-level hardware systems
(Raspberry Pi), or image detection, or emulation of ancient systems, or
perhaps something integrated into RL ("Internet of things").

~~~
JackMorgan
I totally agree, you can't just set a goal and aim for that, chances are by
the time you're there, everyone will be racing off to the next thing. Better
to setup a habit of constant improvement, and soon you'll be the one leading
the pack.

------
kfk
At least you have “cool” degrees, if you were a business mayor, it would be
even worse. I am not sure what are your expectations workwise in startups
world, but so far I could easily talk to (even advise) most of the programmers
I met (and I am a business mayor). So, my guess, but it’s a well thought
guess, is that you are already a top choice by raw skill, however, the chance
that somebody will trust you with quality programming work without a github or
a programming/CS background are very slim.

This is rather ironic given the focus on skill that this industry seems to
have. On another note, the fact that you (and me) have no github profile with
at least a good polished project under the belt might imply lack of
motivation/interest.

------
fredophile
Change your attitude about the job you're going into. I guarantee you can
learn plenty working at Bloomberg. Based on what they sell I'd guess they put
a huge emphasis on reliability. They probably also maintain a lot of legacy
code. This stuff may not be sexy but you can build important skills working on
it. There will be good programmers at your new workplace. Work hard and learn
from them.

------
brudgers
One of my favorite essays from HN:

[http://sivers.org/below-average](http://sivers.org/below-average)

