
Ask HN: I don't have CS and feel flustered - apineda
I&#x27;m 27 and I have been programming a long while but am missing CS, it&#x27;s hurting on the job front and confidence front. It would be a lot easier to have cool demos on git if I had some kind of CS related &quot;solution&quot; there to show. I&#x27;m becoming flustered of only being able to do CRUD solutions etc. I want to be working with people of higher calibre and I feel I cannot gain that entry (eg. Google as the prime example) without CS or some kind of micro-focus of CS. I&#x27;m afraid of tackling some topic (eg. linear algebra) then being shut down because there are 100 other topics, or that half of linear doesn&#x27;t do me any good anyway, or I should be working on a meteor.js demo for practicality. Part of the frustration is that I don&#x27;t work around CS people and so I&#x27;m stagnating in an area I feel is important to me. I first got my job (co-op and stayed on) and worked under a great engineer and had a great time but he left about 8 months after-ward and ever since then it hasn&#x27;t been the same. I struggled since HS without a calculus&#x2F;vectors course (and without foresight taht it would limit my entry into programs). I&#x27;ve since done some calculus but do not have credit. Should I just do it online, get the HS credit, and apply for CS at a uni? I think I will be taking too much of a step backward but I don&#x27;t see how else I can shake this limitation.
======
ako9
I created an account just to reply.

I have been working successfully in the technology industry as a Developer for
over 10 years. I have recently left a job where I led a good-sized team of
Developers and I now run my own company.

Through countless interviews and meeting with clients, I have been asked
exactly 4 times about my degree and educational background. I don't have a
degree. No one cares. They do care about what you have done (experience,
portfolio) and what you can do for them (your value).

Information Technology is perhaps the most accessible industry:

* You have access to the exact same tools as a Senior Developer at Google. How much did you pay for Apache, PHP, Angularjs, Go, Dart, Javascript, CSS, HTML, Ruby..etc. $0. All you need is a laptop and internet connection. For a few dollars a month you could even deploy your app to the same massively powerful technology infrastructure which a Senior Google Developer uses (Google App Engine). Do you know how lucky you are to have access to the same resources?

* If you wanted to be a Lawyer or Doctor or Accountant.. you would HAVE to go to school and get a Degree. Online you can find documentation, tutorials, discussion boards.. everything you need to learn. I would rather learn online myself than accumulating tens of thousands of dollars of debt to learn the same thing.

You are focusing way too much on what you don't have.

> I'm becoming flustered of only being able to do CRUD solutions etc.

There is NOTHING stopping you from learning more than CRUD solution.

> or I should be working on a meteor.js demo for practicality

There is NOTHING stopping you from working on a meteor.js demo.

Perhaps you feel alone and feel University would provide you with the
structure and guidance you need. My advice is to find a good friend who is as
dedicated to learning as you are. Have your own classes twice a week with your
friend where you learn something new each class. (E.g., meteor.js). Try that
for 4 months. Work hard at it. After 4 months if you are not progressing, then
look at University as an option.

~~~
citruspi
> Have your own classes twice a week with your friend where you learn
> something new each class. (E.g., meteor.js). Try that for 4 months. Work
> hard at it.

In addition to that, you can also attend local meetups on subjects (Civic Data
Hacking, Python, Meteor.js, etc...) that interest you. You'll learn more about
the subject and you'll meet other people who have experience in it and can
provide guidance on learning it.

------
1331
If you stay with your current job and do not go to university, here are some
concrete ideas for things that you might want to try, which I would recommend
based on what you wrote:

* Learn C. I have heard good things about _Learn C The Hard Way_, which is free, though I have never used it myself. Since you want to know more "CS," work through _Introduction to Algorithms_, a pretty standard (second-semester) university text, in C (NOT a language than manages memory for you!).

[http://c.learncodethehardway.org/](http://c.learncodethehardway.org/)

[http://mitpress.mit.edu/books/introduction-
algorithms](http://mitpress.mit.edu/books/introduction-algorithms)

* Work through _The Elements of Computing Systems_ (aka "From NAND to Tetris"). The book is fun, and it introduces many topics that are more advanced than CRUD.

[http://www.nand2tetris.org/](http://www.nand2tetris.org/)

I have many other ideas, but I decided to stop here in order to emphasize
those above. :)

~~~
apineda
Thanks. I love C and I love assembly tutorials. I got through about half of
K&R. I should see it all the way through. I also have the algorithm book but
it's unopened. :o I have the desire it just feels like quite the mountain.
Maybe I'm making it feel bigger by just not walking it? Or walking it alone.
Thanks for your advice it reinforces my thinking.

~~~
gzzzzzd
You could watch the video lectures instead of or in addition to reading the
algorithms book.

I've seen quite a few of these and thought they were ok:

[http://videolectures.net/mit6046jf05_introduction_algorithms...](http://videolectures.net/mit6046jf05_introduction_algorithms/)

This one is newer though:

[http://ocw.mit.edu/courses/electrical-engineering-and-
comput...](http://ocw.mit.edu/courses/electrical-engineering-and-computer-
science/6-006-introduction-to-algorithms-fall-2011/lecture-videos/)

I guess I would check out both and see which professors I like the best :)

------
nobleach
I'm not gonna lie to you, many - MANY places you interview are going to do the
"CS Secret Handshake". They may have you whiteboard some problems to see how
you think. (this is completely legitimate) But they might ask, "ok, so tell me
about the efficiency of this algorithm in Big-O notation." You can learn that!
Many tech interviews are done by tech people that have no interviewing
skills... so they go look up ridiculous interview questions on google, and ask
you to solve them. Then they don't do YOU the favor of letting YOU look up
solutions! You can combat this by learning how to solve problems methodically.
I agree with the other commenters about learning data structures and
algorithms as a bare minimum. Then do something like Rebecca Murphy's JS-
Assessment (if you're into Javascript). A bunch of math is no substitute for
raw problem solving talent... although they often overlap.

~~~
raffi
Re: CS Secret Handshake--years ago, I found the Programming Interviews Exposed
book. I own the first edition. It's a lot of concise explanations of different
Computer Science topics. The authors focus on things that are likely to come
up in an interview. The book provides a few tricks and an orientation to
topics that are worth looking at further.

------
whatthemick
Yeah i'm struggling with this aswell - I basically dropped out of the danish
HS-equivelant.

I think i'm a pretty decent coder, but i have next to none experience with
algorithms - Usually i'm pretty good at learning new things just by trying out
and reading up on them (server management, new languages etc).

Algorithms is the one that really seems to require an education, i'm having a
hard time learning that stuff on my own - But i'm giving it a go by working my
way up to linear algebra on Khan Academy and reading examples on Naive Bayes
etc.

------
jesusmichael
Google is just a small sliver of the cool companies to work at. They hire top
tier tech guys because they can afford it, but 99% of them aren't going to get
rich working there. Microsoft, Apple and Sun used to be the places to work,
before that IBM and Intel. Find the next google and be part of it.

------
brudgers
Ok, you're 27. Suppose it takes you 7 years to get the mathematics background
for CS. Odds are you will still have 50+ years to do the sort of work you want
to do with the kind of people you want to work with. [1] And the key is the
maths. Once the mathematics gets beyond a person, they can follow along, but
can't really do the task independently and mathematics is hard for many
people.

But it's nothing that can't be done if you're willing to grind it out. That's
probably true for everyone, it's just that some people have the advantage of
not knowing they are grinding it out.

Good luck.

[1] And in the Dear Abbey tradition, you'll have 50+ years of not working on
things you want to work on with people you want to work with if you don't get
the maths under your belt.

------
jrmenon
Some of the best programmers I have seen have a non-CS background, and were
self-taught.

Based on how I interview (and also on various interviews I have attended),
here are some suggestions on how to begin:

1) Start with some basic data-structures: a) Arrays b) Linked List: both
single and double c) Hash Tables d) Binary Trees with some familiarity to one
or two types of balanced trees - e.g. Red-Black and/or B-trees. e) Stacks and
Queues - built on arrays and/or linked-lists

If you can practice it with writing some code in C or Java, that would be a
big plus. You can get a hang of the aforesaid structures by coding the usual
functions - find an element, insert, modify, delete, iterating through all the
elements etc...

As you are doing it, get a feel of the big-O notation - i.e. understand the
various tradeoffs on why you would pick a certain data structure to solve a
particular problem

2) Get some exposure to search and sorting algorithms and understand the
various trade-offs - maybe start with linear and binary search, insertion
sort, merge sort and quicksort (for the latter two, you will get an idea of
divide-and-conquer strategies, recursions and so forth).

Most advanced data-structures/algorithms are built on the aforesaid
foundations, so with (1) and (2) alone you have strengthened it, and based on
your interest, you can dig down further if needed to related areas - e.g.
graphs, linear algebra problems etc...

3) Get an exposure to OS/System level programming if possible - e.g. if you
choose Linux, you can get some idea of processes vs threads, schedulers,
memory mgmt, file and network IO etc.. At the very least, writing some toy
code here, say opening files, forking a process, socket IO and so forth will
give you some practical exposure.

4) HTTP/Web services: You already mentioned meteor.js so it looks like you are
already familiar here esp. with tools like Firebug to see raw HTTP payloads
and so forth.

5) Databases - SQL, and maybe some NoSQL use-cases.

6) OOP and Design Patterns

As you get a grip on the aforesaid areas, the more code you read, it will add
to the practical use-cases. For some of the topics, you could get familiar
with the area using any of your favorite scripting languages (including posix
functions for point 3).

Give yourself ~ 6+ months and get as much exposure with practical use-cases.

~~~
tannerj
For points 1 and 2 coursera.org has a great set of courses on algorithms[1],
Taught by a Princeton professor. I started the first one a couple of months
ago, but had to drop out because of time constraints. I've re-enrolled for the
upcoming section. It has a companion book, Algorithms[2], that I bought which
was a great help. I don't have a copy of CLRS[3] But I've heard it is also a
great reference and is on my amazon wishlist. Other than that, MIT's
OpenCourseWare[4] also has the entire CS degree online for free. It's funny,
reading your post I thought I hide sleep posted or something. You seem to be
experiencing exactly what I'm going through. I'm also 27 and don't have a CS
degree. I am highly motivated though, and have no problem hacking at this
stuff on my own. I've talked to a bunch of CS majors who actually still feel
inferior after they graduate so other than helping the impostor syndrome[5]
that I suffer from, I'm not sure that a degree would do me a lot of good.
(With the exception of padding my resume and getting me in the door for an
interview). [1]
[https://www.coursera.org/course/algs4partI](https://www.coursera.org/course/algs4partI)
[2] [http://amzn.com/032157351X](http://amzn.com/032157351X) [3]
[http://amzn.com/0262033844](http://amzn.com/0262033844) [4]
[http://ocw.mit.edu/index.htm](http://ocw.mit.edu/index.htm) [5]
[http://en.wikipedia.org/wiki/Impostor_syndrome](http://en.wikipedia.org/wiki/Impostor_syndrome)

------
TotalEclipse
If you watch Silicon Valley (HBO) episode 1, there is a character who is
fairly adamant about NOT going to uni / doing CS!

------
Ologn
Some people here are talking about you studying CS topics on your own. So
let's say in August you start spending nine hours a week studying some topic -
say, theory of computation. You spend nine hours a week studying it from
August to December.

Well, if you are taking one class a semester at your local public university
this fall, you would be spending three hours a week in class to do this.

You're going to have to spend 9 hours a week from August to December studying,
say, theory of computation, in order to get a BSCS level grasp of it. Why not
spend _12_ hours a week doing it, and actually getting a BSCS in the process?
You'll also get a professor you can ask questions of during class, after
class, during office hours, and probably other times. There are other benefits
of going to school as well.

One of the biggest problems if you don't have a BSCS, is you don't know what
you don't know. If you don't understand how floating point numbers are stored
in memory, at least you know you can always look into that. The real problem
is when you don't pursue a solution because you don't even know it exists.

I tried to write a multi-threaded C program with changing state before I took
a class in mutual exclusion. The results weren't pretty. After the class, I
had to deal with another mutual exclusion problem - a somewhat tough Java
mutual exclusion problem in some production code. I was able to fix it fairly
quickly. When you're writing code and realized you need some feature, often
it's simple. When a program progresses to where you need threading and mutual
exclusion - most people don't stop what they're doing and spend a few weeks
studying mutual exclusion like they would have in college. They just plow
through it which is why people complain about bad threading in code so much. A
BSCS gives you that background you were always lacking.

Also, the tendency for someone doing this on their own is not to spend four
months study calculus, then four more studying calculus, then four more
studying calculus, then four more studying discrete math, then four more
studying theory of computation, and THEN studying C++ for four months. Usually
people on their own are just going to skip the more theoretical stuff and jump
right into the immediately practical stuff - straight to C++. But then they
will never have the background required - they never took graph theory, so
data structures such as directed acyclic graphs are hard to understand.

There's always something to learn, but a BSCS gives you a good foundation and
background to build off of. People here are saying you can do the three years
of study to cover a BSCS education on your own. Which you can. So why not
actually spend four years - the one hour in class for the typical three hours
of homework. Do four years instead of three and get the actual BSCS. You can
go at night, weekends, online (but don't do a scam one) etc. Many professors
are alright, a few are very good and only one where I went was a poor teacher.

