
Ask HN: With no CS degree, what was most frustrating about learning how to code? - lpnotes
1) For those of you without CS degrees, what do you (or did you) find most frustrating about learning how to code?<p>2) What resources (e.g. mentors, websites, coding classes or bootcamps, youtube videos, books, co-workers) did you find MOST helpful in accelerating your learning?&lt;p&gt;For example, if it was a combination of factors that led you to have the skills you have today, what could you have not done without?
======
cwbrandsma
1) when I was learning...as a 10 year old in 1985...lack of available learning
materials and no one to ask questions. I got a magazine once a month, no one I
knew could program. And the only language I had at my disposal was GW-Basic.
Now: there are probably too many available resources. I'm teaching my kids and
the amount of materials is staggering.

2) Just sitting down at the computer and struggling with it -- not looking for
the easy way out, figuring out things myself. Teaching only gets you one step
of the way, after that it is all you. I would spend hours ready every book I
could and writing small programs.

2) Second part was programming as part of a team and doing code reviews. That
will shape you up like nothing else. But you can't do this step if you don't
do the other part (writing lots of code on your own).

~~~
kstenerud
This.

I started programming in 1984, writing in C64 basic, and didn't move on to C
and assembler until 1989 (shortly after borrowing a modem from a friend),
simply because I didn't even know such languages existed until then.

There's a staggering amount of (free!) information available nowadays for the
budding programmer, to the point where your only major challenge is discerning
the good from the bad (and that's easy enough to solve). The biggest
accelerator to learning is having a pet project or three.

------
ForHackernews
I don't have a CS degree. When I was first learning to code, but also even
today: The most frustrating things are all the bullshit that goes along with
writing code but isn't actually writing code...

* Setting up environments and auxiliary tools: Should I use rvm or rbenv? What's bundler? Why do I need a rake? Where's my Gemfile? Ooops, I meant my Gemfile.lock.

* Understanding the sysadmin/architecture things: So I need an HTTP server and an app server? Wait, but some app servers are HTTP servers? But you need a proxy for static content? And a load balancer? (To be fair, in the modern world these tasks are vastly simplified by services like Heroku)

* Databases: Choosing a DB, choosing a library to connect to the DB, do you use an ORM or write SQL? Nowadays, I follow the "Always use Postgres unless you have a damn good reason" rule.

* Testing. Writing unit tests is incredibly tedious. Learning how to mock/stub/fake out critical libraries is a giant pain that I still commonly goof up today. Writing good tests easily takes 2-3X the amount of time it takes me to write working code.

* Deploying. Ugh.

------
hemaljshah
The most frustrating thing to code IMO is going through the tutorials,
accomplishing them and then saying "now what?" It's easy to follow along
things like CodeAcademy or LearnRails or any other site that teaches you the
basics of getting started, but after that, where do you go? You no longer have
the structure of a classroom that gives you the next project where you can
build or challenge your skills...while not setting you up to fail and become
discouraged.

I highly recommend finding a project you're actually passionate to work on
after you are done with your tutorials. If you're passionate about it, you're
going to push through the frustrating parts that feel like you're not prepared
or don't have the experience.

Use co-workers, forums, communities like StackOverflow and use them
aggressively. Become rigorous at searching Google to find the answers first
and give it a few tries, but don't be ashamed when you hit the wall. For me,
the only way things will stick is by practicing them and trying to take them
to the next level!

------
coralreef
I tried to learn programming a few times on my own. Once as a young teenager
with Visual Basic, then with Java ~6 years ago, and finally Objective-C.
Looking back, the biggest impediment was learning about programming, and not
actually doing programming. Great - I know what a for loop is, now what? My VB
and Java environments sucked. There was nothing I could immediately create and
get to practicing.

I had much more success learning XCode and C/Obj-C. I read some lessons on C,
then switched to Objective-C by following the Stanford video course on iTunes
which showed you programming + hooking up XCode interface objects to run your
methods (I realize I could have done that with Visual Basic originally, but at
the time I couldn't think of anything I wanted to build in VB). Then I
followed tutorials on raywenderlich.com and continued from there.

If I needed help, I Googled, posted on StackOverflow or asked my one
programming friend.

------
eshvk
I don't have a C.S. degree. I had an Electrical Engineering degree which meant
that I knew how to think logically and construct scripts of things. This means
that I knew fuck all about data structures or modularization of code. However,
I really really learnt how to build complex systems by studying more
mathematics. Specifically pure math. It trains your mind to think in terms of
raw abstractions in a way that hardens you and makes programming easy. It also
helped that I took real analysis the same semester as I took Operating
Systems. The brain has a small working memory set. The only way to deal with
complicated systems is to learn to recognize the forest and not get lost
amidst the trees. Even now, when I interview people or get interviewed,
Ultimately I don't really care what tools you know, what languages you use.
Sure, it is great that you know the stack that this company, this team uses.
But ultimately, what matters to me and the work I do is how fast you can break
down a problem and see the underlying simple backbone. These are the kind of
people I like working with.

------
rubiquity
1) I would say the amount of options of programming languages and types of
development there are out there.

2) No resources in particular stand out to me, though I think books were way
more useful early on than blog posts or tutorials. I think it's the linear
nature of books that really helped me.

My advice would be to pick one medium (web, iOS, Android, whatever) and one
language (for me that was Ruby) and stick to that language only for at least a
year.

Other advice would be to always be inquisitive. Though I didn't get a degree,
I eventually went on to learn about operating systems, sockets, basic
algorithms and data structures.

However, in my opinion getting a CS degree would be frustrating if I were to
do it all over again. Learning all that implementation detail and a lot of
schools not even pushing or requiring you to build things would really
frustrate me.

------
delluminatus
I do have a CS degree, but I first learned to code in high school. I was
taught by a friend of mine who already had pretty significant programming
chops even at 16. I think his father invented YAML. We did our programming on
PCs that we built in the classroom and installed Ubuntu on.

Anyway, I remember the hardest part for me was wrapping my mind around Ruby
blocks. It sounds kind of dumb but honestly I couldn't understand them for
weeks. The first programs I wrote were those text-based adventure games, like,
"You're on a path in a forest. What do you do? > Go left". I did those because
you didn't need to ever use blocks for them, it was all just conditional
logic.

Once I grokked Ruby blocks I feel like it has all been downhill from there, at
least until I stated looking at Haskell...

------
Someone1234
I didn't learn anything useful from my CS degree. Literally nothing. Even
things like compiler design and operating system concepts were more basic than
I had already studied. However if you go into a purely academic area, like AI,
it might be useful to you (particularly the high level maths).

As far as resources: Really depends on the topic.

You can watch lectures for an entire CS degree for free online via places like
UC Berkeley. There are also paid video stuff at places like Pluralsight
(coding), CBTNuggets (server management), and as you said even YouTube has the
good video now and again.

I just google whatever I need as I need it. It isn't a very formal way of
learning but it is an effective one. The only trick is not to skip doing
things because you don't already know how to do them.

------
hackNightly
No CS degree here, currently working as Senior Front-end developer after 5+
years in the field.

1) I found it most frustrating to try and choose between learning what's the
most popular new technology and what would help me advance my career. It turns
out, focusing on mastering the basics of HTML, CSS, and Javascript have gotten
me much further than trying to jump on every new bandwagon that rolls by.

2) Honestly, the single greatest resource has been my side projects. All of
the tutorials, training and learning from Google have been far surpassed by
the amount of knowledge I've gained from sitting down and hacking on ideas. I
seriously have had 1million side projects in my 5 years and each of them has
been a challenge and an amazing learning experience.

Hope that helps

~~~
TheSageMage
#1 Very true. If you are creating a lot of personal projects than you can hop
on many bandwagons, but for a majority of enterprise coding, have the web
stack + C#/Java/Other major language is all that will be required of you.

------
J_Darnley
1 - Choosing a data and function structure for whatever problem you're facing,
and then implementing it. I ended up being inspired by libavfilter for what
I'm working on now.

1 - Other computer science "things" that I presume you get taught. The ideas
and concepts behind common algorithms. Sorting, searching, path finding, some
other things I vaguely remember from my "decision maths" course at school.

1 - Setting up my environment. It is much easier with now with newer versions
of cygwin and mingw64.

1 - Autotools.

2 - If you're looking for just one stand-out resource: the existing code you
want to work with. Beyond the basic "hello world" examples I don't find
writing something from scratch to be that beneficial to learning.

------
glenda
One thing I try to do is read everything that is considered well written or
canonical in some way.

These types of resources tend to be informative, easy to grasp and often
inspiring. They are things like books/textbooks, blog posts, tutorials(most
tutorials suck though). They will usually reference other (even more
canonical) resources so you shouldn't really have problems finding new stuff
to read. You can pick and choose based on what sounds interesting and repeat.

This has been extremely efficient for me, and I have learned a lot pretty
quickly.

------
jobquestion123
1) Real world examples of algorithms. I really wanted to get into algorithms
and data structures, but it was always hard to find an actual reason for
things.

2) More than anything, contributing to open source projects taught me how to
code, how to read and edit existing code, and how to collaborate with other
developers. In terms of early stages, Learn Python the Hard Way was huge,
because it introduced me to all the OTHER online resources (like Stack
Overflow) that were available. I also found some of the Udacity videos
helpful.

------
john0
1) The most frustrating thing about learning how to code for me was getting my
IDE or environment set up to work with whatever tutorial or book I was working
from. Figuring out what the cryptic compiler errors meant was sometimes
insanely difficult.

2) Some of the more helpful things for me were the Head First series of books
from O'Reilly (Java and C# in particular), and having a few experienced
programmers in real life to talk to. The one thing I seriously could not have
done without, no question, is Google.

------
thinkerer
1) Everything. Even simple things like pushing codes to repositories took me
eons to pick up. Also, programming isnt hard, in fact its easy. The hard part
is understanding how to link up everything, front to back and to others such
as codetesting, for example with Rspec.

2) I felt sites that promote start-to-end lessons step by step are great. Like
codelearn.org. Videos and all are good too but they often target experienced
people, so its much more painful to use those.

------
josephschmoe
Spaghetti/fat code is probably the biggest problem for new programmers -
though they're probably not aware of it. It's very, very hard to make any
module larger than ~500 lines without overcoming it.

This was a huge issue for me for probably about two years.

Then, I took a look at my projects using a dependency visualization tool
(Structure101 for Java/C#) and I got a lot better as I fixed all of the
tangled code/fat classes.

------
aosmith
I've got a little experience with both. I taught myself to program in the
early days of the internet (well not that early, but 28.8 no less). I also was
a CS student for a couple quarters before dropping out.

On the whole I think it's gotten a lot easier. I remember spending days on
forums trying to solve little problems.

Either way the best way to learn is by doing.

------
tn13
You dont need a CS degree or even any degree for that matter to learn to code.
What you need however is a good skill with basic mathematics and logic.

During my childhood finding a computer was the most frustrating part. I
instead wrote programs on a fucking notebook.

------
pigDisgusting
Dependency Hell.

And oh yeah, Make. I fucking hate Make. Not as much as I hate pay-to-play
ecosystems like Microsoft Visual Studio, but yeah, fuck Make.

------
danvoell
1) Setting up a development environment and understanding how and why it
worked.

2) Co-Founders were my mentors

