Which one will serve a novice programmer better: a classic book in a circuit or a modern language like python?

I'm really interested in becoming a serious programmer, the kind that people admire with hacker bites, unlike the corporate drone, who can't even complete FizzBuzz.

I currently deal with several languages, most of my experiences in Perl and Shell, and I cursed a bit in Ruby.

However, I cannot help but feel that although I know bits and pieces of languages, I do not know how to program .

I'm really not in a hurry to immediately learn a language that can work for me (although I would like to do it soon), and I am considering using PLT Scheme (now called Racket) to work through How to develop programs or structure and interpretation Computer programs, in fact, are one of the classical schemes, because I have always heard that they teach people how to write high-quality, convenient and readable code.

However, even MIT has changed its introductory course from using SICP and Scheme to one in Python.

So, I ask for the advice of the sages of many experienced programmers here regarding the following:

  • Does the circuit (and make these books) really teach how to program well? If so, which of the two books do you recommend?
  • Is this approach to learning relevant and applicable? Am I on the right track?
  • Am I better off spending my time learning a more practical / general language like Python?
  • Is Scheme (or lisp in general) a language that you will learn, but never to use? Or often those who know lisp code?

Thanks, and sorry for the incoherent.

+7
scheme
source share
12 answers
  • Does the circuit (and make these books) really teach how to program well? If so, which of the two books do you recommend?

Maybe. Probably better than any of the Learn X books in Y Timespan.

  • Is this approach to learning relevant and applicable? Am I on the right track?

Yes.

  • Am I better off spending my time learning a more practical / general language like Python?

Only if you plan to get a job. However, the scheme will give you a better foundation.

  • Is Scheme (or lisp in general) a language that you will learn, but never to use? Or often those who know lisp code?

I am doing emacs elisp to configure my emacs. I also work with functional languages ​​on the side to try to be flexible.

My personal opinion is that there are essentially two tracks that you need to go through before a student can claim to know something about programming. The track is the machine itself, the computer. You should start by building here and find out how the computer works. After some work and understanding there - don't skimp - you should learn C, and then C ++; really understanding resource management and what is really happening. The second track is a very expensive language track - Scheme, Prolog, Haskell, Perl, Python, C #, Java and others that run on a virtual machine or interpreter lie in this area. They also need to be studied to find out how problems can be abstracted and thought in different ways that are not related to bits of a real computer.

However, what will not work is a language dabbler in teaching programming. You will need to find a language - the scheme is acceptable, although I would recommend starting at a low level first - and then stick to that language for a good year, at least.

+8
source share

If you want to learn how to really program, start doing it. Complete the work and write the code. Choose a language and write a code. Solve problems and release applications. Work with experienced open source project programmers, but do it. Lot.

+11
source share

The most important parts of the Scheme are programming language concepts, which you can choose to say that modern languages ​​now simply accept or add support.

Lisp and schema supported functions in front of most other languages ​​that were often revolutionary for a while: closing and first-order functions, continuations, hygiene macros and others. C has nothing.

But they appear more and more often in programming languages ​​that Get Stuff Done today. Why can you just declare functions, apparently somewhere in JavaScript? What happens to the external variables you refer to inside the function? What are these new “closures” that PHP 5.3 is currently getting? What are “side effects” and why can they be bad for parallel computing? What are "extensions" in Ruby? How do LINQ functions work? What is lambda in Python? What is the big problem with F #?

These are all the questions Scheme will answer, but C will not.

+5
source share

I would say it depends on what you want to do.

If you want to get into programming, Python is probably better. This is a great first language, similar to most common programming languages, and widely available. You will find more libraries in convenient mode and you can easily do things.

If you want to get into computer science, I would recommend Scheme along with SICP.

In any case, I would recommend learning several very different languages ​​in the end, to give you more opportunities to find and solve problems. For example, a reasonable knowledge of Common Lisp will make you the best Java programmer. I would take them one at a time.

+1
source share

The best languages ​​to start are:

  • the language you want to play / learn
  • the language you want to work in

And probably in that order, if not the most urgent need to feed themselves.

Here's the thing: the way to learn how to program is to do a lot. To do this a lot, you will need a lot of patience and more than a little enthusiasm. This is more important than the specific language you choose .... but choosing a language that you like to work with (whether because you like the features or because you feel like it will teach you something) can become big incentive.

However, here are a couple of comments on the scheme:

Does the circuit (and does these books) really teach how to program well?

The thing about the Scheme (or something like that) is that if you recognize it, it will teach you some very useful abstractions that many programmers who never come across a functional programming language will never learn, you'll think otherwise. The essence of programming and computing languages ​​will look more relevant to you. You will have a better idea of ​​how to compose your own quasi-primitives from a very small set of primitives, rather than relying on the usually static set of primitives offered in some other languages.

The problem is that a lot of what I'm saying may not mean much to you at the moment, and it is a little more bending path than switching to a common dynamic language like Perl, Python or Ruby ... or even a language , similar to C, which is close to the mechanics of von Neumann machines.

This does not mean that you really need to start a bad idea: I was part of an experiment where we taught Prolog about all things to first-class programmers, and it worked surprisingly well. Sometimes a novice mind actually helps. :) But a scheme as a first language is definitely an unconventional way. I suspect Ruby or Python will become more expensive.

Is Scheme (or lisp in general) really a language that you learn is just for never to use?

This is the language you are unlikely to be hired to participate in the program. However, while you are learning to program, and after you have learned and do it in your free time, you can write code anywhere you want, and because of the Internet, you can probably find people working in open source projects , in whatever language you want. :)

+1
source share

I hate talking, but no one admires programmers for their “hacker chops." There are people who do shit, then everyone else. Many of the former types are "corporate unmanned aerial vehicles" that you seem to despise.

Now, for your question, I personally love Lisp (and Scheme), but if you need something that you are most likely to use in the industry, Beginning Python may be the best material for you, as Python is more common in the wild. Or, if you like Ruby, find some good Ruby stuff and start creating working solutions (the same with Java or .Net or something else).

Indeed, any route will serve you well. The trick is to stick to it until you have learned the concepts you are learning.

+1
source share

The question of whether the approach to learning is relevant and applicable is difficult - there are many different learning styles, and it is important to find out which ones apply to you personally. Keep in mind that the style you like best may not be the one that really works best for you :-)

You have a lot of time, and it seems that you have the enthusiasm to get rid, so it is not a question of which language you should learn, but which one you should study first. personally, I would look what you have learned so far, what types of languages ​​and paradigms you have under your belt, and then go away along the wild tangent and choose one completely different.

0
source share

I started programming at a very young age. When I was in high school, I thought I was a good programmer. This is when I began to learn HOW and WHY languages ​​work, and not just syntax.

Before learning how and why, switching to a new language would be hellish. I learned the language, but I did not learn how to program. Now that I know the basic concepts well, I can apply them in almost any language and easily raise it.

I highly recommend a book (or even a school rude, if you can afford it), which guides you through coding processes without relying on a particular language.

Unfortunately, I do not have books to recommend, but if others agree with me and know something, maybe they can offer an offer.

// Edit: after reading your question again, I understand that I may not have answered any of them ... Sorry. I think that compiling a book that will help you deeply learn best practices will be extremely useful regardless of the language you choose.

0
source share

There are basic programming concepts (logical flow, data structures) that are easy to learn using languages ​​like Python. However, there are much more complex programming concepts (design patterns, optimizations, threads, etc.) that classic languages ​​do not abstract for you.

If your search for knowledge is more likely to develop algorithms and the science of programming, start with C. If your search is more suitable for practical purposes, I heard that Ruby is a good starting point.

0
source share

I agree with gruszzzy. I would start programming with C.

It might be intimidating at first (at least for me: S), but in the end you would be grateful. I mean, I love Python, but since I first learned C, the learning curve for other languages ​​was not at all steep.

Start with C and do it.

Just remember to practice it, because you will never improve anything without doing anything .;)

0
source share

In the specific question of your question, the "classics" you mentioned will help you exactly what the names say. SICP is dedicated to the structure and interpretation of computer programs. This is not a training program (although you will learn the scheme). HtDP is about how to develop programs, not a curriculum (although you will learn the scheme).

The scheme, in principle, is a very small and concise language, with virtually no strokes. This makes it excellent for moving on to learn how to structure and interpret programs, or how to design them. More traditional “practical” languages, such as C, C ++, Python, or Java, do not have this quality. They abound in syntax. Learning these languages ​​means that you must learn syntactic quirks at the same time, learning to think like a programmer. In my opinion, this is sad. In some cases, quirks are good, in others - accidents of history, but in all cases this is unfortunate.

0
source share

Start coding in C At first it should be horror, but it teaches you the most important things, such as: pointers, repetition, memory management. Try reading some classic books on programming, such as The Art of Programming by Donald Knuth. Once you handle this, you might consider learning about object-oriented programming or functional programming. First basics . If you manage to study them, you will never be difficult again.

-one
source share

All Articles