Hacker Newsnew | past | comments | ask | show | jobs | submit | boingyjump's commentslogin

Unlike others, sounds like you feel like there is a difference between having a CS degree and not. What sort of differences do you find? If you could go back, would you have started out with a degree?


There's a few things that have driven me to get a CS degree:

- Salary: I have found it difficult to get out of the 50-60k bracket without qualifications, and I personally feel that for my ability, I am getting ripped off. Also, my full-time job was grating me quite a lot. I was working under my brother for one, and my fellow programmers were not very good. I didn't really enjoy going to work. It didn't challenge me.

- Family: No one in my immediate family has a degree, and I mean to change that. It might seem a silly reason, but my family is right behind me and with it comes a sense of pride.

- Skill: Although I am confident in my ability in certain areas, I desire to learn more of the lower level skills like compiler design, algorithms etc that I didn't have time to learn on my own. Focusing on it completely seemed the only way to succeed for me personally.

- Diversity: I felt as though I was in a hole with regards to the technology I was working with, and had no perceivable exit strategy. I want to explore more than just CRUD applications. It also gives me the chance to try out things I would never had even considered looking at, such as circuit design.

- Networking: Learn the craft alongside others who are passionate about the same things. I know there are other ways to achieve this, but it comes as an added benefit.


This really resonated with me - thank you for posting it. If you don't mind me asking, what convinced your future employer to give you a chance? (and/or what convinced you that you were ready to take the plunge)


I'd known for a while that the job I was in was a dead end. I was taking a lot of online programming courses and geting involved with local meetups, etc. When a friend who'd ended up in a non-programmer role at a tech company offered to put in a good word for me for a poorly-defined 'assistant' position, I went for it. I was honest about my skill level, and it turned out that there was a lot of work that anyone sufficiently interested could do. It was a lot of pretty boring stuff at first, documentation and testing, mostly. But there's always some small project that falls exactly in the 'inexperienced new guy' sweet spot--something that everyone wants, but can do without, and no one has time to write, or else something that some manager has asked for that a project lead doesn't want to waste developer time on. After I did well enough on enough of those, the requests to do the more boring things got fewer and farther between.

In general, my job search strategy has always been to look at opportunities orthogonal to my field. I didn't look for software jobs per se--if I had to compete against CS degrees I'd have been a goner. Instead, I looked for positions where I could use the knowledge I had as a multiplier for my productivity doing something else.

It also really helps that the market for good devs is pretty competitive. It means that once you're in and you've proved yourself a bit, it's easier (and often less financially risky) for your employer to take a chance on your ability to learn than it is to hire another dev when something needs to be done.

But as I said before, this approach sort of kicks at least one can down the road; if you start off at 'assistant' level, it's hard to move up in people's perception.


Thank you for taking the time to put together the links! The "show your work" part feels like the hardest, but I guess that's just something I have to push towards to figure out. As an aside, do you know anyone who's learned successfully from codecademy/codeschool? I love the idea of them, they just seem really simplistic.


The are quite simplistic, but that's kind of a feature - Use them to get down 'the basics', before moving onto actually using languages to solve problems. There's no better way to learn than through building actual 'things'.

As an aside, my very first introduction to Python was competing with a friend, building scripts that would automatically create accounts on a forum, login to those accounts, and then use them to give ourselves 'karma'. That weekend I learned more than I'd ever known about Python, HTTP and web scraping. Its a silly example, but mini projects like that can really help you learn.


When you're first starting, you have to be simplistic. That is the target audience anyway. The ability to write code is going to continue to be in demand, and there are not enough people with the necessary experience to fill some of the positions out there.

How to solve the problem? Start developing tomorrow's programmers today.


I'm injecting my own language bias here, and I must admit that this is not an opinion that everyone agrees with, but I think you're better with Scala or Clojure than with Java. (Both run on the JVM, so you end up learning the Java ecosystem.)

Scala is a "better Java" and you can learn both the JVM and functional programming (take Odersky's course on Coursera). Clojure is a great Lisp but the Java stuff will be very confusing if you haven't seen it before (the JVM-interop functions like proxy, gen-class, and reify don't have the easiest APIs).

This (Structure and Interpretation of Computer Programs) is a great book to get started on the deeper aspects of CS: http://mitpress.mit.edu/sicp/full-text/book/book.html

Also, I like this one: http://www.amazon.com/Concepts-Techniques-Models-Computer-Pr...


What helped you learn the most? Did you have a project/idea that drove you along?


That's a hard question to answer. There were a combination of motives and opportunities. Motives were things like a strong desire to prove myself combined with an anger at the lob sided salaries.

Opportunities were a major application that was written so badly (in java) that I learned a lot by fixing and refactoring. A poor social life that came from a divorce and moving states gave me an opportunity to spend an additional 40+ hours a week after work coding and experimenting and seeing what I could do.

In a more general sense. Giving myself a goal and working on figuring out how to achieve it in code was far better for me then merely reading a text.


What did you find most effective for teaching yourself? Did you have some driving "thing" that you wanted to build/do?


I signed up for work I couldn't do(!). This sounds scary and awful, but basically I dug in and learned as much as I needed to to write basic applications, then put myself out there for clients. I sold my services for a fraction of what clients would normally pay.

Now, before everyone starts freaking out, the trick this whole situation is that you must be willing to learn how to do everything the right way. No cutting corners, no copy pasta. Treat this like a magical classroom lab where they actually pay you.

You will feel stress. You will work harder than you've ever worked. I was putting in probably 100 hours a week between my day job and this work. But I also got to a point where I could really write code and archetect software in about 2 years time.

It really helps have a close friend who you can turn to when you need someone to help guide you a bit, but if you don't have one, try to get ingrained in some dev forums.


I feel that. What spurred you to take the plunge?


Is [USNews & World Report](http://grad-schools.usnews.rankingsandreviews.com/best-gradu...) a good source to decide which Masters Programs are legit and which are just junk? Seems like there's a lot of crap around...


The best advice I can give is to go to school websites and look at their course catalog. Specifically, look at the professors teaching the core courses and whether the courses you'll be taking are the same courses that undergraduates and PhD students at the university take.

Many masters programs are what one of my professors calls "mercinary-masters". Their job is to bring in money in exchange for a piece of paper. You're taught by adjuncts, you take courses that are watered down from the courses that undergraduates take, some of the professors might not even have degrees related to computer science, etc. Your purpose is to subsidise the undergrads and PhD students and the main criteria for admission is whether they think you can get passing remarks to get the degree.

The US News rankings are for doctoral programs, not masters. The rankings are formulated very simplistically via a survey asking people, "how good is the program at School X". So, they aren't such a good source. Plus, with your background, some schools aren't going to want you. That isn't a dig at you - you're re-training and some schools only do PhDs (with masters for those who drop out) and other schools don't do conversion-style masters.

If you have more specific questions, I might be able to help. Still, the best advice I can give is to make sure that you're not getting segregated off into a special class of cash-cow masters students who are being given a watered-down experience in exchange for money. It's easy to look through course catalogs and who teaches the courses you'll be taking and look at the professor web pages and see where you're getting someone brought on board to teach a course and where you're getting faculty.


I agree that you want to ensure that the coursework is of sufficient quality. However, I wouldn't avoid terminal masters degrees with no financial support in themselves. E.g. Stanford's MS in CS falls into this category.

Edit: not that the parent post was implying that such programs should be avoided, bit it is common advice.


Do you have any suggestions for specific programs? I'm particularly interested in getting a better understanding of data structures and algorithms (granted, that's super broad), because that seems like the hardest kind of thing to learn well online.


Honestly - I feel like I don't have enough time with work to be able to "prove" myself enough to get hired. (and also when I study by myself, I get about 0 feedback from others, so I feel like I'm learning terrible practices). I guess two specific questions: 1 - how can I "prove" myself? and 2 - what kind of places actually take junior programmers?


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

Search: