Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

I'd like to get back to the basics of CS. Any suggestions for tutorials or application-minded reference material? [closed]

I've been programming as a consultant for years, and I adore my work, which involves a lot of object-oriented analysis and design of software systems using managed languages (ie. software engineering). But I'd like to get a doctorate eventually, and it bothers me that I never really "got" Computer Science theory. In university I only did marginally well in those courses because the way they were taught did not work for me. I learn by observing application of concepts, not rote memorisation.

An example of where I've overcome such a barrier before - I had a horrible first year. The professor (who I now know was barely qualified and an incompetent teacher) started with C++, teaching us procedural programming. Technically I'd learned what an object was, but it wasn't until I saw the application of object-oriented analysis and design (with design patterns and other structures such as linked lists) that I really understood what they were for.

How would I go about learning subjects such as compilers, programming language theory, and analysis of algorithms? What would be a good way to get started on those? For example, I'd like to write a compiler eventually (for fun) but I've no idea where to start. Anyone ever been in this situation? Any suggestions for tutorials, free online lecture videos or reference (Something like w3schools would be wonderful)?

(I'd like to add that browsing Stackoverflow has already taught me loads, but I'd like it to be a bit more formal : )

EDIT: Thanks all for the suggestions. I've marked an answer that works for me personally, but keep the answers coming : )

like image 728
calico-cat Avatar asked Jan 27 '10 22:01

calico-cat


People also ask

Which programming language should I learn first as a beginner?

Python. Python is always recommended if you're looking for an easy and even fun programming language to learn first. Rather than having to jump into strict syntax rules, Python reads like English and is simple to understand for someone who's new to programming.

What is programming language in simple words?

A programming language is a vocabulary and set of grammatical rules for instructing a computer or computing device to perform specific tasks. • The term programming language usually refers to high-level languages, such as BASIC, C, C++, COBOL, Java, FORTRAN, Ada, and Pascal.

How many programming languages are there?

You can start coding after learning just one language. According to the Online Historical Encyclopaedia of Programming Languages, people have created about 8,945 coding languages.


2 Answers

I like Sedgewick's "Algorithms" (isbn 0201066734 1988 604p) because it talks one through algorithms in a conversational style, and has good examples. See the reviews under Amazon. (There are many variant editions, multivolume C++ Java etc.)

(Added 2feb:) Althoough algorithms are fundamental and fun, they're rather remote — hiking in high country, not the daily traffic jam.
Bentley's "Programming Pearls" (isbn 0-201-65788-0 2000 239p pearls )
"is full of small case studies, real examples, and interesting exercises for learning about how to program".

For big team software projects, Brooks's "Mythical Man-month" (isbn 0201835959 2ed 1995 322p Amazon ) is a must:
"conceptual integrity of the product is critical". And citing Parnas on p. 221:

instead of teaching people that O-O is a type of design, and giving them design principles, people have taught that O-O is the use of a particular tool. We can write good or bad programs with any tool. Unless we teach people how to design ...

Finally, visualization / GUIs / UIs often have a lot of room for improvement. I don't know of a good introductory book in this area, on a par with the above; anyone else ?

like image 95
denis Avatar answered Nov 21 '22 00:11

denis


If you plan on getting a Ph.D. someday, why not just go back to school right now? There are tons of courses you need to take as a Ph.D. candidate, and finding research in a more CSish field (algorithms, etc.) will help you with this venture even more.

like image 42
Robert Greiner Avatar answered Nov 20 '22 23:11

Robert Greiner