Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon.

Pages: 1-

what to study next?

Name: Anonymous 2014-01-08 22:37

dear programmers:

would it be harmful or dumb to learn functional programming before any other paradigm, such as imperative, or object-oriented? i took one course in college intro c++ and want to move forward now, so i'm thinking either object-oriented and moving to data structures (berkeley cs dept available free on their site), or functional programming w scala (coursera) next.

thoughts?

Name: Anonymous 2014-01-08 22:57

imperial ^^ it is the simplest

Name: Anonymous 2014-01-08 23:04

Try Lua; it has both and it's embeddable with C.

Name: Anonymous 2014-01-08 23:12

NO! You must write 5 programs, the programs being 1000, 2000, 4000, 8000, and 16,000 lines minimum in that order. You must complete each program in a maximum of 3 months each. One of your programs must be a software rasterizer, the other must be a compiler, the other a memory mapped database, the other an http server, and the last a UNIX clone. Then you shall attain the rank of "novice" in C++. Then you may move on to another language.

Otherwise you will become yet another Hacker News hipster. Doomed to discuss programming languages, yet never actually use them.

Sincerely, the /prog/ Lisp guy :)

Name: Anonymous 2014-01-09 0:08

install gentoo

Name: Actual advice 2014-01-09 0:20

If you want to learn computer science, read SICP and learn Lisp.

If you want to understand system programming and how computers actually work, learn C or assembly.

Wanna do OOP? Java, C#, and C++ are good options.

Just itching to get some shit out there fast? Python and Javascript will do that for you.

Name: Anonymous 2014-01-09 0:36

>>6

NO!

SICP does not teach you Lisp. It teaches you Scheme. Scheme is not Lisp.

He is not ready yet for Lisp. He is not ready yet to pass the first trial of the knights of the lambda calculus.

Your advice that he learn Python is malicious and evil. I banish thee back to /g/

Name: Anonymous 2014-01-09 0:59

>>6

Java, C# and C++ don't teach you OOP. They teach you "mainstream" programming (for lack of a better word).

Smalltalk teaches you OOP.

Name: Anonymous 2014-01-09 1:45

>>7
Scheme is lisp and SICP does not teach you a programming language

Your advice that he learn Python is malicious and evil
I agree but what if he saw this: http://wingolog.org/archives/2009/03/24/international-lisp-conference-day-two

Name: Anonymous 2014-01-09 2:24

>>9

Scheme is a language in the Lisp family. It diverged from (not evolved from!) Maclisp. So it shares something with today's Lisp (ANSI Common Lisp and , I suppose, ISO ISLisp) but it is not Lisp.

Technically, Scheme has shed some of its Lisp heritage in favor of ALGOL influence. For example, Scheme's symbols are not really symbols like Lisp symbols are. Furthermore, earlier versions of Scheme were defined as a grammar over text (very very unlispy!), as opposed to Lisp (Scheme) objects. For a long time, Scheme did not have eval either but you had read and load or something like this.

I like Scheme. It is "a" Lisp, but it is not Lisp. IN comparison, Common Lisp is both "a" Lisp and is Lisp (today).

SICP does teach you a programming language, especially the first few chapters. However, I assume you meant to say "SICP does not just teach you a programming language", in which case, I agree.

Name: Anonymous 2014-01-09 2:49

Before object oriented?
And you took a course in C++?
What?
C++ is object oriented.

Anyways, I'd suggest studying the datastructures and algorithms first.
It'll certainly be more useful, both in the future and for just generally honing your skills.

Name: Anonymous 2014-01-09 2:52

>>4
Yeah, this guy has the right idea.

Name: Anonymous 2014-01-09 12:50

OP here, thanks all, and Lisp guy. Your plan sounds epic/intense. I have no reservations about it - except that I need to develop my skills at a quicker pace for grad school. My undegrad was physics, I took 3 CS classes that led up to Intro C++, I also can do most web languages, learned a bit of python at my last job. Now am back in school and need to really lock down some skills so I can finish my thesis not feeling like a schmuck.

I don't want to become a HN hipster lol but I do want to grow from where I am currently, and in the right direction so it helps me complete my education (MS thesis).

One way or another I have to do this, I just want to make sure I'm doing to semi right, and appreciate the input. I'd love to write a compiler, that'd be rad, but I don't have the overhead currently.

I'll most likely end up working with OOP in web/c#/c++ (or java) for this thesis, so I'm guessing I should just continue in the lineage of classes at most schools (in my free time), which go: intro (language), data structures, discrete math, algorithms, operating systems.

I just want to stop messing around and do it right already, while giving myself enough to understand/complete thesis.

Name: Anonymous 2014-01-09 13:07

>>1
I'm doing same thing. Doing data structures, then maybe scala on coursera. SICP next prolly.

Name: Anonymous 2014-01-09 19:22

>>13

Ok. Thanks for the background info.

There's diminishing returns on classes when it comes to improving actual programming ability around 2nd or 3rd year.

I am serious about not learning another language. Given your situation, and my own experiences, I highly recommend you just branch out to Java (not C#, not D, but Java) (at this point your inexperience is on your side. It means you won't feel a thing going from C++ to Java), and stick with Java.

Don't learn different programming styles through different languages. As fashionable as it is, it's not important, and like all fashions, its kind of a joke to anyone who doesn't care about fashion. More importantly, at this point it will just waste your time and hold your back. Learning different languages is a luxury for only very advancedc programmers. Almost all the programmers I've seen that have "learned" a few different languages don't really know any of them, and are very bad programmers.

Java is a good, mainstream, multi-paradigm, old school (newbies often make the mistake of thinking that something being around for a long time is a bad thing, it's not, as you get more experienced you'll value it more and more) language. I've seen Java wizards do some pretty amazing things.

The programming style most studied and used (structured, procedural) is precisely the style you write (most) Java programs in, but Java also lets you write programs in other styles too (e.g. I've seen Java wizards use it as a dynamic language; I've seen a wizard call a method given a string with that method's name, I myself have passed objects of anonymous classes around like I do lambdas in Common Lisp, there are REPLs written in Java (e.g. Dr. Java)...).

Java VMs also have concurrent GC and concurrent JIT which is really really cool.

Anyway enough about Java (I hate that language ;). Given your background and your goals this is my serious recommendation for you:

1. Take no more classes.
2. Read the book "Introduction to Algorithms"
3. Read the book "Compilers: Principles, Techniques, and Tools"
4. Read the book "The Java Language specification"
5. Don't do anything beyond this!

You should read the Java book along side the other two, and you should read the algorithms book first then the compiler book. As you read these books, complete all exercises, and make concrete any examples or things you don't understand (i.e. write programs, experiment), in Java. Read the books cover to cover. Don't skip. Write notes as you read them. Be very very meticulous.

If you are studious you should finish everything in 3 months. In these 3 months you will have learned more than a gazillion classes of "learn X style of programming with hipster language Y".

And seriously, you don't need anything more than these three books; You definitely don't need to learn any other programming languages. If you need to know something incidental like IDK UNIX sockets or something just google it and learn exactly what you need and don't follow any rabbit holes. Just stop there.

Especially don't worry about your programming style. It's great. If it's not causing you any headaches it's great. Don't worry about this. The people that do are terrible programmers.

Thank me in 3 months. Get to work.

- The Lisp guy ;)

Name: Anonymous 2014-01-09 19:25

Also I have very good readon for recommending exactly these three books and no others. If you wish to know the reasons ask :)

Name: Anonymous 2014-01-09 19:38

>>15
hey, I'm wondering if you have any good recommendations for a C student. I'm on the same path as this guy, but looking to get more in depth. Would you recommend the same path (i.e. same books)? Thanks

Name: Anonymous 2014-01-09 21:11

OP Here, thank you Lisp guy - much appreciated. I will start on this path and report back. Just for clarification on the texts:

"Introduction to Algorithms", 2009 3rd edition, Cormen et al., ISBN 0262033844

"Compilers: Principles, Techniques, and Tools", 2006 2nd edition, Aho et al., ISBN 0321486811

"The Java Language specification", 2005 3rd edition, Gosling et al., ISBN 0321246780

 Cheers

Name: Anonymous 2014-01-09 21:57

>>18
if you want those books for free i found the first two at
libgen.net
:)
cheers

Name: Anonymous 2014-01-09 22:55

>>17
I'm not sure. If you have decided to master C then the Java spec won't be that useful, so swap that with the C standard.

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf

>>18
All good (however see below :)

>>19
The last book is available for free (legally) from Oracle and, because it is a reference book, the HTML format might be advantegous (if the PDF is not hyperlinked).

http://docs.oracle.com/javase/specs/jls/se7/html/index.html

Name: Anonymous 2014-01-09 22:57

Playing around a bit with project Euler might be worth while.
It really hammers into you the idea that efficient algorithm > efficient code.

Name: Anonymous 2014-01-09 22:59

>>20
thanks so much! you're awesome m8

Name: Anonymous 2014-01-11 9:45

>> 21

implying that learning coding through rote problem solving is not a good technique? been coding for 15 years, could prob handle most situations in my language but i don't know if i agree with this more academic approach. perhaps it works when they still haven't sullied themselves with all kinds of crap.

Name: Anonymous 2014-01-11 15:16

>>23
Not sure if this is what you mean, but...

Programming is putting together pre-existing parts to create whole programs.
Doesn't matter if the part is as simple as a primitive operation like + or an entire sorting algorithm.

People like Knuth dedicate their lives to developing optimal solutions to problems. It's just plain daft to constantly reinvent the wheel when those are available.

People who have the mentality of "I don't study algorithms, I just write them" are morons who will be doomed to write shitty code for their entire careers.
I actually heard someone say this.
Unsurprisingly they were a Microsoft employee.
It's no surprise Microsoft programs are such bloated garbage.

Name: Anonymous 2014-01-11 15:26

>>24
optimal solutions
Shalom!

Name: Anonymous 2014-01-11 15:27

>>25
How do you choose who to speak Yiddish to, Jew-san?
Seems to be completely at random sometimes.

Name: Anonymous 2014-01-11 20:55

Sorry >>10-kun but you are wrong: Scheme, as CL, is a dialect of LISP.

Name: Anonymous 2014-01-11 21:05

>>1
Learn C, x86 Assembler, Forth, Scheme, SmallTalk, Standard ML, OCalm, Scala, Prolog, Erlang (or Elixir), Haskell.
Good luck.

Name: Anonymous 2014-01-11 21:06

>>28
x86 Assembler
Shalom!
Yes, goyim! Fill your brain with brain-rotting Jewish shit!

Name: Anonymous 2014-01-11 21:30

>>27

No it is not. See my post for an explanation.

>>28

Terrible advice. "SmallTalk" is mispelt, Scheme is only interesting when you have mastered Lisp, and Standard ML, OCaml and Haskell are all the same darn thing (Scala too) and they should probably be at the bottom of anyone's list of "languages to learn before I die", you might as well have said "learn Java, C# and PHP" what the heck is the point?

Back to Hacker News.

Don't change these.
Name: Email:
Entire Thread Thread List