

Ask HN: While learning to code, should I worry about CS theory? - soneca

In addition I would say that I don't want to be a developer. I am a non-tech founder, learning to code only to perform better as a founder. I already outsourced a prototype, so I am learning only what I need to deal with it (front-end, C# and Azure management).<p>My decision for now is to focus only on practical courses (i.e. Treehouse, CodeCademy and Head first! C# book). I am wondering if I should use some of the more academic, theoretical courses, such as CS courses on coursera.org (e.g. Algorithms, Part I, from Princeton). In the future, this is the kind of knowledge that interests me, but for now, I can't afford a slower learning curve. Is it worthy?
======
argonaut
I strongly disagree with stray and edent.

You have already admitted that you do not want to be a developer. I assume you
want to be merely _proficient_ in software engineering because that will help
you build prototypes/MVPs and will help you outsource work / find a technical
co-founder. You've admitted that right now you only want to learn what's
essential.

Someone who builds quick prototypes and glues together APIs and frameworks
does not need very much knowledge of theoretical CS. Even someone who is
technical and builds web and mobile apps full-time only needs a very
superficial knowledge of CS theory (data structures / algorithms).

You are on the right _general_ path in terms of learning to code. Understand
that Treehouse and Codecademy are _extremely_ basic, to the point where you
honestly would not be able to build very much after having gone through them.
Head First C# should be more in-depth than both of those. I'm not actually
sure what type of programs you want to create (are you building windows
apps?). There is no substitute for actually going out and building things.

I can tell you straight up that Algorithms Part I is way overkill right now
(red-black trees and heapsort are fascinating and are studied by any college
CS freshman, but are really not relevant to you), and you will probably never
reach a point in terms of technical proficiency where those topics would be
helpful to learn.

Here is some CS-y stuff (really really basic stuff) that might be helpful to
learn: the difference between an array, a dictionary, and a set (and the
performance differences in terms of insertion and lookup). Knowing what stacks
and queues are is also helpful. I've listed topics that you could read up on
in about an hour. Honestly, knowing just those topics, you would probably know
as much theoretical CS as you'll ever need to know as a jack-of-all-trades
founder.

Even if you wanted to one day be a technical co-founder (for web/mobile apps),
three or four online classes would just about cover all the theoretical CS you
would need to know.

~~~
soneca
Thanks a lot, that was really helpful. I already have a MVP, so this is more
about iterating it than building new ones. It is a web app, written in C#,
running on Azure, that is why these are my focus. I will take a look on the
topics you mentioned.

~~~
argonaut
Interesting... It's very uncommon for startups to develop web apps using
ASP.NET (I'm assuming that's what you're using C# and Azure for). Is there a
reason you chose that?

~~~
soneca
I was non-tech founder deciding how to outsource my MVP. RoR was very popular
in SV, but there wasn't many developers in Brazil neither for RoR or Python,
at least comparing to PHP and .NET. PHP was out because of scaling issues (as
I was told at the time), so there was ASP.NET with a significant number of
developers and good reviews about scaling and suport. And all bad reviews of
.NET had, 99,9% of times, only two topics: "I hate Microsoft" and "You will
have to pay a lot of things to develop in it". Well, I don't hate MS and I was
applying (and eventually succeed) to its BizSpark program, so I would not pay
for anything, including hosting infrastructure. So it seemed a good choice
then.

------
edent
Yes. For some aspects.

At a very basic level, you need to know how and why some algorithms are more
efficient than others. Otherwise, you won't know what's possible and what's
impossible.

It will also help with your bullshit filter. When your outsource partners try
to take advantage of you (and they will) you need to have some idea of what
you're talking about.

~~~
soneca
And do you think algorithms is a good subject to start this more theoretical
CS learning?

~~~
edent
Imagine someone came up to you and said "I want to paint a picture as good as
the Mona Lisa. What's the minimum I need to know about art?"

Would you say learning to mix paint is as important as understanding
perspective?

It rather depends what you're trying to accomplish. For example, if your
mockup requires something computationally heavy (or impossible) you're really
going to struggle.

------
rartichoke
I think it's worth learning about big O and the basics on certain data
structures. They will generally help you on most projects.

The basic statistical information is pretty useful too, even outside of
programming. Knowing how to test something properly or how to create
meaningful benchmarks is a valuable tool to have in your developer tool belt.

------
allenp
My advice is to focus on learning aspects of software engineering at the
expense of learning computer science.

Specifically I would focus on: requirements engineering, software
architecture, software testing, and software deployment... Working with people
(communication, management, working with non-technical customers), processes
for developing software, and how to measure and analyze the software product
and the software process[1]

[1] <http://users.csc.calpoly.edu/~djanzen/secsdiff.html>

~~~
soneca
great link, clarify a lot for me, thanks!

------
stray
It doesn't matter what path you take -- it is a long road to competence in any
endeavor.

Without a foundation in CS theory, you are likely to fail to recognize the
truly monumental blunders as they're taking shape.

