Live data from Hacker News

Advice for an aspiring programmer?

news.ycombinator.com

1–10 of 13 posts

Advice for an aspiring programmer?

#1
Hi everyone,

I'll try to detail my situation as quickly as possible, any input or advice would be greatly appreciated.

I'm a 2010 graduate of a liberal arts college with a degree in philosophy and classical studies (emphasis on Greek). Upon graduation I took a job on a mid-term senatorial campaign, before going off to travel for the winter and part of the spring. I then took temp position (through mid-September, with the possibility for an extension) at a marketing agency in the New York metro area.

When I began college, I thought I would be a comp lit or English major, but through my exposure to philosophical writings, I gradually became enamored with the type of rigor and lucidity associated with analytic philosophy and symbolic logic--had I had my current preferences then, I would have majored in mathematics or cs, but as it is I have the degree I have.

Lately, I've really taken an interest in programming--it's really not too far off reading Greek, in certain respects. I've been working my way through LPTHW and I think SICP will be next on my agenda.

I really would like to get into development one day, and I'm more than happy to teach myself the relevant languages. My worry is that no matter how hard I work, I will still lack the appropriate signaling mechanisms. I have no practical experience with python, nor a cs or math or econ degree. Given the level of competition in the economy generally right now, is there any feasible way I can make up this deficit? My hope is that I'll be taken on in a more permanent capacity at my current firm, so I can have 10 or 11 months of employment while I polish up my python/lisping skills. Does this sound like a decent plan? Is there anything else I can do to bolster my resume/make myself more appealing to perspective employers? Am I making any obvious mistakes? Is this whole thing hopeless? Thanks again for any input.

Re: Advice for an aspiring programmer?

#2
Starting out I felt it was most helpful to learn at least the basics of build up languages so that its easier to understand ones that are thrown at you. Good ones to know are PHP/Python C++/C# and Java. My reasoning was that if you work hard to gain an ok understanding of all of the different programming areas, you can learn new aspects of the languages to suit projects you receive. Hope this helps..

Re: Advice for an aspiring programmer?

#3

Starting out I felt it was most helpful to learn at least the basics of build up languages so that its easier to understand ones that are thrown at you. Good ones to know are PHP/Python C++/C# and Java. My reasoning was that if you work hard to gain an ok understanding of all of the different programming areas, you can learn new aspects of the languages to suit projects you receive. Hope this helps..

If you set goals in each language (such as a functioning PHP website) and maybe pick up a couple books I think your plan is obtainable!

Re: Advice for an aspiring programmer?

#4
I know a lot people rever SICP, but I think at this stage it's not the best way for you to learn programming. It's a bit too theoretical.

I have a degree in CS and a love theory. I guess philosophers also tend to prefer the theoretical aspects of CS. The problem with this is that you can study theory for years on end and still not be very good on practical tasks that are essential to getting a job or building a website.

After you finish LPTHW, start making small projects. Make scripts to automate stuff that you often do. Read good source code. Learn how to use a source-control system (subversion is fine for this). If you wanna build a website, learn some SQL, HTML and Javascript.

Re: Advice for an aspiring programmer?

#5
INMHO, the best thing to do is to make something cool and interesting and share it. Next up is to meet other programmers, e.g. meetups, etc. Another suggestion: maybe even take a class or two just to see how learning in school is different than learning on your own. It will also expose you to more people with similar interests. I am not a fan of conventional schooling, esp. for programming, but it does have its benefits in terms of socializing with others (profs and students).

Your path is not unrealistic, some of the best programmers I know were liberal arts grads and taught themselves on the job.

Re: Advice for an aspiring programmer?

#6
Programming and software engineering are not the same thing. You can teach yourself a bit of programming from books. Software engineering on the other hand requires a far more holistic body of knowledge and experience.

SICP and LPTHW are not in the same league. SICP is what you want to really grok if you want to become a software engineer and LPTHW is sufficient if you want to become a great Python programmer. PHP and Ruby are also fine starting points. But to be valuable as a potential hire you need to understand the APIs and main frameworks for the language you choose to become proficient int.

Stanford, MIT and Google have excellent video courses publicly available if you prefer lectures to reading books. Either way, you need to write lots of programs, ideally for something that you are really interested in and get feedback from more experienced people.

Re: Advice for an aspiring programmer?

#7
Here is my take:

If you are just going to learn a programming language, there is still plenty of competition. Instead, I would suggest that you build a web-based product. It involves a lot of moving parts that you will get familiar with. It is quite an arduous task.

Don't focus on the tool (programming language); instead, step back a little bit, see the bigger picture and build something with that tool. People are much more appreciate of such efforts.

Edit: In case you need some hand holding in the initial stages, I am more than willing to help.

Re: Advice for an aspiring programmer?

#8
I have a CS degree and 20+ years of professional experience and I can tell you that your love of philosophy and symbolic logic will serve you far better than any of the advice you've received here so far.

Would you just dive into a proof using truth-functional propositional calculus if you were totally ignorant of the rules of inference?

Would you try to operate on someone without being training in medecine and surgical techniques?

Ignore anyone that tells you to learn "language X" or "just dive in and build something". It's bad advice, unless you like stumbling around in the dark.

The right way takes longer but you need to build from a solid foundation. Right now, you don't know what you don't know.

Which language or platform you choose will be largely irrelevant. Learning a new language shouldn't take you more than a few weeks. Mastering a new language is another matter entirely, but essentially still just a matter of practice.

Invent your own pseudo-language (or read about pseudo code) and learn how to decompose a problem into discrete steps. Learn to recognize and apply patterns in your solutions. Familiarize yourself with common data structures and algorithms. Do all of this before you ever try to write a line of code.

While you're doing that, read voraciously. Books. Blogs. Read everything you find anywhere that good programmers congregate (like Stack Overflow). Ignore the loud hand-waving pundit. Listen to the quiet voice of sanity. You'll soon learn to separate the wheat from the chaff.

Unfortunately, the wrong way sometimes works. The danger is that you'll build mental models of how things work based on the language and environment that you use. We need these models to cope in the absence of deep understanding. It's how the brain works and we do it almost automatically. However, if you approach the process at a more abstract level your model is more encompassing and you can easily simplify it to fit the situation. Shifting your thinking from abstract to concrete is easy, the other way is much harder because you're missing the big picture.

Re: Advice for an aspiring programmer?

#9
Let me start by saying that it's not impossible, I know this for a fact because I did it. I'm 19 years old, I don't have a degree and a few months ago I landed my first job. I'm working as a software engineer.

Having said that however, don't for a moment think it will be easy. I've been programming as a hobby since I was nine and, after finishing full-time education, I spent the best part of a year learning and brushing up on my skills. Crucially, this was not something I did in my spare time, but continuously; I was effectively in full-time education.

There are two distinct pools of knowledge that it's in your interests to nurture: theoretical knowledge and practical knowledge. You will only be effective when you have a solid grounding in both. I may have made the mistake of focussing to heavily on the theoretical, but by working is possibly the best way to gain practical knowledge, so I'm addressing the imbalance.

There are a few topics which I focused on that have proved to be invaluable to me:

* Data structures and database design,

* The web stack (by which I mean the entire stack, how does TCP work or the OS schedule threads),

* Functional programming,

* Compiler internals,

I would have also greatly benefited if I'd had known more about asynchronous programming. Specifically, how are synchronous programs translated to work asynchronously, ie, how do threads work? How is CPS conversion an alternative to using threads?

Good luck.

Post reply on HN