Conversation started Oct 21, 2013 at 16:14.
Oct 21, 2013 16:14
so I asked this question the other day and was curious what peoples thoughts might be: programmers.stackexchange.com/questions/214899/…
user55340
@gnat I think I partially addressed it in the mockups... though I can edit it (to bounce it) and call that out a bit more.
user55340
0
Q: Learning C, Lisp, and UNIX from Ground Up

huntercA friend and I are trying to learn traditional programming from the ground up. We both do web stuff primarily but want to expand to more system related things. We have found a ton of resources but looking for a road map of sorts. We are planning on using SICP to learn Lisp(scheme). Don't reall...

user55340
@hunterc Just oneboxing your question...
user55340
(there's a whitelist of sites that will automatically populate the contents if you paste the link in by itself... amazon, wikipedia, questions, answers, comments, other sites, other chat messages, xkcd...)
@MichaelT thanks gotta learn how to do all this things in chat lol
Oct 21, 2013 16:25
@hunterc Start with Haskell, all will made whole in time.
Ugh
ignore him
No, don't ignore me, that was a touch of sarcasm (sort of)
user55340
@hunterc Every chat system has its own nuances... it can take a while to learn all the tricks.
really though. if you're going to learn lisp at all, do it first.
user55340
What do you mean by 'traditional programming'?
Oct 21, 2013 16:26
@JimmyHoffa didnt someone else recommend learning some other FP language first?
We were going to start with SICP and scheme
LISP will get you in the thought process of functional decomposition more quickly and comprehensively than the others
@hunterc Good, do this.
While you're at it, learn emacs
(EMACS runs on a lisp derivative and works great with LISPs)
@JimmyHoffa that made me waste some of my perfectly acceptable coffee all over my disk
but the key is: learning emacs to start with will mean when you move on to other languages you'll have an IDE that you know how to use that works with all of them
@MichaelT We were both designers who kind of tinkered in programming then realized we cared more about it than making pretty pictures so learned a bit of JS and jQuery but no real fundamentals so we both want to switch to programming fulltime but kind of trying to sprint when we don't know how to stand yet
user55340
Oct 21, 2013 16:27
Back in college, I had a class "theory of programming languages" - we wrote a program that generated a maze in different languages. Simple program that has a complex enough algorithm that it isn't trivial to just 'redo' in the different language style.
@hunterc That's exactly what the SICP is for. It served as the intro to get people to think like a programmer at MIT for many years.
@JimmyHoffa yea thats what we heard figured if its good enough for MIT it's good enough for us
user55340
Ok... try this as a project then. Write a javascript / jquery page that takes a json object and renders a maze. Then write a program in each language that writes the json object that you could then C&P into the page and see if it worked right.
user55340
(just as 'enough' of a problem to get some of the fundamentals down)
@MichaelT okay
Oct 21, 2013 16:30
Hi again
Oh, who's talking about SICP :D
@jozefg me :)
attempting to learn lisp
6 mins ago, by MichaelT
0
Q: Learning C, Lisp, and UNIX from Ground Up

huntercA friend and I are trying to learn traditional programming from the ground up. We both do web stuff primarily but want to expand to more system related things. We have found a ton of resources but looking for a road map of sorts. We are planning on using SICP to learn Lisp(scheme). Don't reall...

user55340
Write the program in Lisp, C, Java, Haskell, Python... anything else you can get your hands on. Don't be afraid to use existing libraries when they are appropriate - part of knowing a modern language is being able to find and use external resources.
@hunterc An excellent place to start :) I hope you're using Neil Van Dykes SICP mode for doctor racket
Forget all about that, just learn Ruby. It's the future man.
Oct 21, 2013 16:31
@jozefg uhhh......lol
user55340
2 days ago, by MichaelT
(lets see... room tools, mute kids...)
@jozefg I suggested he learn EMACS at the same time as a part of the scheme process. Isn't there something like an EMACS for this particular purpose? Am i thinking of GUILE?
we've been using Ubuntu with MIT-Scheme and repl.it haha
benefit being he wants to move on to learn other languages, and then he'll always have emacs to make all the other languages easy to work with after he gets through scheme
@JimmyHoffa @hunterc Well Dr. Racket is just nice to learn with, it color codes errors and draws errors to them
It's all very pleasant and high tech
Oct 21, 2013 16:32
@jozefg Oh is that an IDE? I might have to look at that
and with SICP mode it behaves exactly like Scheme in SICP
@jozefg good to know thanks
@JimmyHoffa Yeah, it's the IDE for all things Racket, I still use Emacs, but it's very nice for beginners
@JimmyHoffa I'm thinking of writing a tutorial on category theory for Haskell programmers..
user55340
After you've written each program in the language (remember to try to code in the style / thoughts of that language), consider going to CodeReview.SE and asking for a review of it.
user55340
(and feel free to link that code review here too)
Oct 21, 2013 16:34
@MichaelT alright cool. thanks :)
I wish I was comfortable posting some of the stuff I've made at work there but I'm thinking that would be a no-no
@jozefg Do it, I need one heh
user55340
(part of the reason why I suggested a maze is that the core of it is small enough to fit into a reasonable CodeReview.SE question)
user55340
Oh, toss Clojure in that list of "the cool kids are doing it".. and Scala.
@jozefg read Bartozs' ones on fpcomplete if you haven't, some of them seem pretty good and give a good sense of intuition I think, and may give you some ideas what's already covered and what does/doesn't communicate well
Oct 21, 2013 16:36
@JimmyHoffa Fair enough, I'm also toying with simply porting Category Theory for Computer Scientists to Haskell
user55340
(I'd do Clojure after Lisp and Java... just to see what else can be done on the jvm)
@MichaelT The only part I dislike about Clojure is the meta, the JVM is so slow to start up, problem
@MichaelT there are so many progrmaming languages
user55340
Another good resource for a set of problems to tackle a new language - Project Euler - projecteuler.net/problems
Keep the JVM constantly running?
JVM does need some serious start up time though
user55340
Oct 21, 2013 16:37
@Sparticus That is the key idea of the app server...
@all i've noticed that theory is very important also. will sicp cover topics like that or do I need to find another book for that?
@jozefg This is why lighttable works the way it does I think. It has a server that does all the compilation/blabla for you, and the UI runs as a client that connects and that way you don't have to wait for the JVM because it's already active
@JimmyHoffa That's how slime works too.. I should really just write some daemon to do that and then just write scripts in Clojure, that'd be fun
@hunterc SICP is all over that. That's why it goes with Scheme, there's so little syntax that the language features themselves can be largely ignored, this way it can focus on fundamental algorithm concepts etc
@jozefg that's what lighttable is, it's a clojure IDE
user55340
@hunterc What part of theory? There are many 'theory' parts to computer science.
Oct 21, 2013 16:39
@MichaelT good point..
user55340
I mean you've got the Chomsky hierarchy and how that applies to different models of machines and the languages they accept... You've got things that are more along the lines of sorting theory, and data structures...
user55340
The way that lisp builds data structures is quite different than java, and again quite different from a more dynamic / scripting language.
@MichaelT I understand the SICP at least touches on most of these. It's supposed to be an intro book, I haven't read it but my understanding is it touches at least lightly on all of these. @jozefg you read it, are there any gaping holes it doesn't touch regarding theory (other than the ultra-modern stuff like haskell's underpinnings and PLT which are just out of an intro scope anyway)
@MichaelT This is why, while people say it's just too much, the concepts book really strikes me as valuable. It's an entire book about these distinctions. Though admittedly you do need some fundamentals before they make any sense
@MichaelT i guess traditional CS theory. fromy my reading first couple courses tackle basic program setup and OO if using java, after that some data structures class on hash tables lists trees etc, algorithms, maybe a class or two on hardware, some discrete math
Oh yes, it touches on basic algorithms, data structures, classifying space and time efficiency (big O)
As well as several ideas in programming language theory, type tagging, logical declaritive langauges
Register machines, meta-circular interperters
And It also of course covers the fundamentals of programming itself, including the dastardly duo, pointers and recursion
Oct 21, 2013 16:45
@hunterc Seriously don't worry about OO. It just muddies the waters in a really bad way. Focus on the uncontroversially good things first, go to OO when you get to the point of being able to think algorithmically and you know data structures and then you want to think about data modeling
Though you definitely should supplement it with CLRS, the algorithm design manual, something like that
Actually SICP teaches quite nice OO, like good old message passing and closures :)
so i guess going back to the root of my question, we want to learn Lisp, C, and UNIX and then build up from there. Trying to build a roadmap so while we are on the topic of lisp: start with sicp, where next?
@jozefg ah, well that's nice then. Though that will probably just make someone confused when they see java's OO that thinks liskov polymorphism is the ninth wonder of the world
SICP -> Algorithms (I recommend Algorithm Design Manual) + K & R -> Book on Unix, I don't have many favorites
user55340
C -> Unix is a much easier path than Lisp -> Unix
Oct 21, 2013 16:47
@jozefg K&R was my first programming book. also as for book on Unix? Do it right, man pages.
I've never done lisp -> unix but can attest that c and unix go hand in hand
we picked up a copy of The UNIX Programming Environment for cheap looked interesting
user55340
@hunterc Lisp -> unix is typically done by invoking emacs... which is an editor wishing it was an operating system.
@JimmyHoffa usually has a stash of articles worth a few books of knowledge
@MichaelT It is an operating system, just a confused one
Oct 21, 2013 16:48
The K&R taught me to think in terms of a turing machine, as well as just being (controversially) one of the most well-written concise books I read which made it a breeze to get through
@JimmyHoffa Agreed, I reread K & R Just to admire the technical writing sometimes
And because occasionally I have moments of weakness and become nostalgic for C
Alright, so the room consensus so far

1. SICP is a good place to start
2. Learn C next
3. Learn Unix with C
4. ???
5. Profit
@jozefg Aye, though I've stated it's quality as an example of Strunk & White done right, I've had people rebuke me on that point saying it's too terse and lacks detail but I just can't agree
@jozefg Might be lack of experience but C looks really nice. Makes a lot of sense. We tried python originally but we just had so many questions about how things worked figured we should to back to basics and as low as possible without hitting assembly (but one day ;) )
user55340
C is... simple (once you get your head around proper pointers and memory allocation).
@hunterc C is good for like I said earlier, it makes you think in terms of the underlying turing machine, it gives you an idea of how the physical works. But I still suggest lisp first because it teaches you to not get bogged down thinking about how the machine works
Oct 21, 2013 16:51
@hunterc C is very good at knowing what it is, it's what happens when you don't add features to a language willy nilly and stick to a core underlying principle
And the result is quite pleasant (In reasonable doses)
I like starting with lisp due to the fact I get to wrap my head around why to do things a certain way plus functional seems nice to learn underpinnings of CS
at the end of the day everything you write is an abstraction over well C, so it's good to know because it gives you the ability to mentally decompress the higher-abstraction code to think about what it's actually doing and how that's going to work out, but that's a skill more useful to the industry programmer than the learner to begin with
@hunterc Yes, this is quite a good way to start
Then you learn C++ do actually do real work but don't want to wade through C to get it done.
user55340
Whenever I write C++, I keep wishing for good old printf()
Oct 21, 2013 16:54
We have set up some interesting goals in my opinion: we want to do that MINIX OS Book, Write our own micro language interpreter parsing typechecker and all
user55340
(oh, memories... writing a program that did sprintf(...) to create a string that was then used in a printf(...) as a format)
interpreters are awesome and interesting, but it will be easy to get bogged down getting it all just right, which might be counter productive to learning as much as you can as quickly as you can
user55340
@hunterc Modern? Target LLVM or JVM...
@MichaelT Ehh, LLVM's SSA is nontrivial to grok at first, JVM, Parrot, CIL, or just writing a dumb interpreter to traverse the AST directly is far simpler
@MichaelT no clue about that yet. That's kind of our final two goals. Implement a simple OS and PL figured it would great learning experience and look good when applying for CS jobs
user55340
Oct 21, 2013 16:57
very few places will need that depth of knowledge.
user55340
Think of CS more as a scaffolding on which to place other knowledge - a library of things to pull ideas out of.
@hunterc interpreters/parsers are fun to write and you learn a lot of good stuff from them about how to design control flow
user55340
There are very few Computer Science jobs. There are lots of programming jobs where a high level familiarity with the concepts is useful, but not critical.
as well as how to represent computations which is useful when you design computations in the future
@MichaelT Yeah, but it's still fun stuff, and besides, of all that exists within the CS lexicon that is hardly ever used, state machines/parsers are easily two of the most oft-needed real-world things, so having the fundamentals about that stuff on your side will actually come in handy more than most other CS stuff
user55340
Writing even a simple operating system can take a very significant chunk of time with no practical outcome... even on a resume (employers will go "hmm..." and you won't be writing OSs unless you are targeting some very specialized career paths).
Oct 21, 2013 17:00
Whoa whoa, writing an OS? EFF THAT
I heard writing an interpreter... captain FUCK writing an OS.
user55340
3 mins ago, by hunterc
@MichaelT no clue about that yet. That's kind of our final two goals. Implement a simple OS and PL figured it would great learning experience and look good when applying for CS jobs
lol @JimmyHoffa I did say end goals. We are both rather determined individuals
A simple OS isn't that crazy. We did that in my OS class. (An OS within an OS that is.) Had round robin time sharing and memory allocation
user55340
If I was a person doing hiring, I'd rather hire a person who could write a program using the frameworks than write an interpreter and OS - those two just aren't as practical.
it was done in unix and had to be able to run 3 different C programs at once, concurrently
we were only told the memory footprint of these programs and thta was it
Oct 21, 2013 17:02
@hunterc the only parts I've seen of writing an OS that people have actually done happen in the obscure corners of the internet where you find these absolute nut-job hobbyists, and even for them they've usually been working on this pet project in most of their spare time for ~2+ years before it even does basically anything
I think you guys are getting bogged down on modern day OSs. what about a little command line OS?
@Sparticus Did you write the bootloader?
user55340
@Sparticus Dos? Apple ][+ style?
> An operating system (OS) is a collection of software that manages computer hardware resources and provides common services for computer programs.
and what hardware did it run on?
Oct 21, 2013 17:04
well we both have CS degrees technically. We double majored and did the bare minium and the curriculum was all over the place and because of credit from other courses they said we could skip certain things so we were totally lost for a solid year. so we decided to be designers which we did decently but decided programming is where would rather be but we needed to relearn it and know more than writing simple things in a high level language
It ran on an atmel chip
some was assembly, some was C
@Sparticus ok this is not unreasonable
he gave us some hex files to put in flash that we would load and execute at boot time
That's fairly common practice in uni's on old hardware to my understanding, but trying to get anything to cooperate with modern hardware is a totally non-trivial task
user55340
@hunterc Its a noble goal, it won't help your job prospects significantly unless you are after some very specialized paths (embedded systems, HFT)
Oct 21, 2013 17:05
well just do it within another OS
we did the same thing as a C program in unix
you started it with X amount of memory and it would dish out CPU time and memory to different applications that it started
no one said it was useful but its a basic proof of concept
user55340
I've only seen the Interpreter pattern used once in production code... and then it was done really wrong.
@Sparticus That's just a task management and scheduler app, useful but not the same really. Most OS related stuff is almost entirely about the underlying hardware
@MichaelT well he aspires to end up at google, my goals are just to build cool stuff
@MichaelT See, don't you wish that person actually studied how to write an interpreter? :D
I see the 3 pinnacle areas as being C, a functional language or scripting language, and JS
Oct 21, 2013 17:07
I would argue that it still meets the minimum to be considered an OS. It managed hardware resources (Memory and CPU time) and provided a framework for other applications to use
user55340
@hunterc Thats not a path that will take you to google easily.
@hunterc Parsers/Interpreters and OS' are kind of diametric opposites in regards to the level of abstraction and rarely do you find folks who focus on those two things because of it, just saying
I agree it didn't interact with the stuff like video drivers and all that jazz
@JimmyHoffa @MichaelT completely agree if i ever get a programming job that asked me to write a OS id be very suprised but more so to prove to ourselves that we know our stuff
but basic memory and cpu is essentially the same whether its within an OS or not
Oct 21, 2013 17:08
people tend to find themselves living at one end of the abstraction or the other, the lowest level being systems/embedded land where you deal with things like OS', the other end being distributed computing where you work on services
we don't want to feel lost again applying for a job just to realize we didn't know crap
and then there are people in limbo who seem to be doing both...
You've got a degree right?
@Sparticus yea lot of good it did lol
IMHO I would just specialize. find something you like and be really good at it. If that's web design, there are companies that are hiring just for that
not to say you shouldn't be well rounded, but making an OS at this stage of the game isn't going to gain you a lot
user55340
You will likely find that working on data modeling, using the existing ORM frameworks in a given language, adding the modern APIs (rest, soap, etc...) and such will take you much further down the path of cool stuff and a job at google.
2
Oct 21, 2013 17:09
@Sparticus That's the problem, he did, and turned out he didn't like design heh
(if you want to work for google that is()
@JimmyHoffa yea haha but I understand @Sparticus point and its a good one
I mean you've got the hard part done. You got the degree. That gets you in the door for an interview. Now you just have to figure out what you want to do. I guess I didn't see the part where you said you didn't like web design
if that's the case then yeah, learn something new. But learn something you want to do
Aye, that job at Google is one hell of a reach, but I agree with @Sparticus and @MichaelT, while studying and learning all this stuff is fun, starting over from scratch will take forever, you'd be better off doing this fun stuff for the fun/learning, but focusing more on picking what you actually want to do for a job and focusing in on that.
Web Services? CRUD software? Systems software? Desktop apps? Mobile apps?
Rockets?
Oct 21, 2013 17:12
think about the different types of software there are and pick one you want to write.
Snow plows?
@Sparticus i have a friend that builds rockets lol
@Sparticus If carmack's any example he does need to know everything...
Academia? Anybody, anybody
user55340
The "starting over" is something that takes a dedicated, full time student, about 2-4 years to complete. When you mix in a current job, you're looking at some very long term things before you complete it.
Oct 21, 2013 17:12
@jozefg Shhhh we don't talk about that here
@MichaelT I agree but I'm young might as well spend my time doing stuff thats fun and teaches me stuff lol
user55340
However, if you've got the fundamentals, applying them to something practical and something you can accomplish in a few months to a year with a reasonable amount of dedication gives you something you can show and say "yes, I did this, I can do this for you too" at an interview.
If you want to learn LISP and make an OS, do it man
if that's fun for you (god help you) then by all means
@jozefg I wish I had gone that route... That seems to be where all the cool stuff is, but instead I went the diametric opposite route by being kicked out of high school and getting no degree
if it's not, move on to something else
Oct 21, 2013 17:14
@MichaelT true we have debated breaking it into two branches me do one he do another and compare at the end, one web based with JS node ruby python writing rendering engines are build a browser
@JimmyHoffa if it makes you feel any better, I think Academia sucks. (No offense Jozefg)
@Sparticus Pshaw we have free food
And more politics than you can shake a stick at haha. At least in a company everyone admits to the politics but it's disheartening to be a green freshman and have politics screw you over
especially when you're paying to be there....
@Sparticus I thought so too. I still do in lots of ways, I just hate the organization and structure of it (thus why I avoided it), but it turns out if you make it through the bullshit eventually at the upper tier you find all the research happens. Industry never does research. Basically never, the only time they do is by hiring someone who did it at those upper academia tiers I mentioned.. those are the gateway to all research which is cool shit
Yeah if you like research, academia is the one of the very few ways to get there
I'll make you an offer Jimmy, you can finish out my last year at Uni, but that means doing my senior design project... entirely in RoR
user55340
Oct 21, 2013 17:18
@JimmyHoffa They do when its in their domain. The R&D part of big tech companies (Apple, Google, Oracle, EMC, Netapp...) they do it quite a bit. They're also hiring people who have the academic credentials to back it up
user55340
@Sparticus See, thats what shows you're a sadistic hipster.
@MichaelT thus my last statement: You still need to make it into those upper academia tiers where they do research before you can do research at a company (90%+ of the time anyway)
I'll admit to the Sadistic part... the hipster was thrust upon me.
user55340
Frankly, if you want to get into the research area, you need the academic grad school level background. Its not something you can easily learn on your own within a reasonable amount of time - its something you need a mentor for and the appropriate environment of focused study (apart from a job).
And some good contacts in industry to siphon some money from...
user55340
Oct 21, 2013 17:22
I know two people who got into R&D. One was a insanely bright guy who was hired by MS out of a bachelors degree. You gave him a problem, and he solved it. The other was a guy who liked AI and spent a decade and a half learning it on his own.
I have a friend doing some Biomolecular Research and 1 vial of her samples is upwards of 5 figures. She needs about 6 for her senior design project....
@MichaelT which is why I wish I weathered the bullshit at school. Plus college would have been a lot more fun than working 80 hours a week with adults who don't party and were all way older than me like my early 20s were spent
user55340
@JimmyHoffa If it makes you feel any better, his degree is in art.
Hearing my wife's college stories makes me jealous
user55340
(he couldn't get his head around some of the areas required for a CS degree, so he switched to an 'art - build your own degree' which was 'computer graphics & art')
Oct 21, 2013 17:26
@JimmyHoffa You must be talking about another school. Mine beats the life out of its students.
user55340
Then he spent 15 years working in the Condor Project where he could dabble in AI in his free time and at home.
 
Conversation ended Oct 21, 2013 at 17:26.