Ubuntu Forums Archive Viewer

becoming a developer...where do i start??? PLZ!!!

Archived thread 1034188 from Recurring Discussions. Markdown source: Recurring_Discussions/thread_1034188_becoming_a_developer...where_do_i_start_PLZ!!!.md

Original URL About this archive
#1

Hi everyone! I'm posting because in the past months i've been captured by the linux world and i am fascinated. my problem is that i have no clue on how to write programs, applications, etc. and even if i knew, i have other doubts i would like an answer for, like, what is a bug? how am i sure that what i think might be a bug is indeed a bug? how do i report it? how do u start an open source project? how do i reach a descent popularity to get feedback? what is an alpha or beta release, and what are they for?...So i have these doubts about concepts around programming i would like to clarify. Regarding the writing software part, what language should i start with? where can i get good quality online tutorials? why is there a need for an interpreted language, and why is it so hard to compile those?

These are my doubts, for what it's worth, here's where i'm standing right now: I'm about to start my junior year in electronics engineering I already know and used, pascal, fortran, matlab & prolog...but always for math stuff using basic things like loops, arrays, ifs and elses...except with prolog which is quite different. I can also use fuzzy logic, neural networks and genetic algorithms.

And here are my interests: Music Music Information Retrieval Semantic Web & Social Networks Optimization (like for example finding the shortest path) Mobile Applications (wireless applications for computers & cellphones) Data Mining Machine Learning

WHERE DO I START???? ANY THOUGHTS??? PLEASE HELP ME OUT HERE! thanx in advance!!!

#2

I would say wait until you've settled into the course and learned more. Any development work will be in C/C++, so you nedd to be quite capable in that world.

#3

laplace/d said: Hi everyone! I'm posting because in the past months i've been captured by the linux world and i am fascinated. my problem is that i have no clue on how to write programs, applications, etc. and even if i knew, i have other doubts i would like an answer for, like, what is a bug? how am i sure that what i think might be a bug is indeed a bug? how do i report it? how do u start an open source project? how do i reach a descent popularity to get feedback? what is an alpha or beta release, and what are they for?...So i have these doubts about concepts around programming i would like to clarify.

Regarding the writing software part, what language should i start with? where can i get good quality online tutorials? why is there a need for an interpreted language, and why is it so hard to compile those?

These are my doubts, for what it's worth, here's where i'm standing right now: I'm about to start my junior year in electronics engineering I already know and used, pascal, fortran, matlab & prolog...but always for math stuff using basic things like loops, arrays, ifs and elses...except with prolog which is quite different. I can also use fuzzy logic, neural networks and genetic algorithms.

And here are my interests: Music Music Information Retrieval Semantic Web & Social Networks Optimization (like for example finding the shortest path) Mobile Applications (wireless applications for computers & cellphones) Data Mining Machine Learning

WHERE DO I START???? ANY THOUGHTS??? PLEASE HELP ME OUT HERE! thanx in advance!!!

you've already got a start at programing with fortran, pascal, and prolog. They're not very popular but it's a start. I'd say C++ is probably the most popular language for open source programs

a bug is an error in a program that makes it function improperly or not at all.

interpreted languages are cross platform in that you can write a program once and run it on any machine with the interpreter. Compiled code only works on that architecture and os. Compiling code can also take a long time, it's a royal pain to recompile when you've only made a small change. anyway compiled vs interpreted is a design choice with tradeoffs

open source projects start off with an idea for a project. http://sourceforge.net/ is a good place to host it

#4

I'd say go for Python + C. In Python you can prototype stuff fast. Using libraries like NumPY and SciPy you can do the sort of stuff matlab does except its free. C is usefull when you need speed and its widely used in electronics. Also, check out the stickies in this board.

#5

laplace/d said: WHERE DO I START???? ANY THOUGHTS??? PLEASE HELP ME OUT HERE!

Read the GNU Coding Standards.

If Linux is your preferred platform, C will give you access to everything. Which is a good thing because you don't want to reinvent the wheel. GNU/Linux has libraries for pretty much anything, and pretty much all of them have a C interface. Also, knowledge in C will open the door to C++, Java, and C#, because their syntax was derived from C.

#6

you can use fuzzy logic, neural nets and genetic algorithm?

yet you don't know what a bug is?

:-k something's not right :-k

#7

laplace/d said: Hi everyone! I'm posting because in the

WHERE DO I START???? ANY THOUGHTS??? PLEASE HELP ME OUT HERE! thanx in advance!!!

Relax , take it one step at a time. All pass from this phase.

After all why complain? Google is your friend!!!

When I started , there was no internet , no google , nothing, only big , heavy , impossible to understand books. And yet I was more relaxed than you.

#8

laplace/d said: WHERE DO I START???? ANY THOUGHTS??? PLEASE HELP ME OUT HERE!

thanx in advance!!!

You've already received some useful advice, so I'll just add:

Avoid typing with all-caps, excessive punctuation, and words like "plz" and "thanx". Short-hand and abbreviating is OK, just avoid "1337 speak". Just a friendly tip, as people will often avoid posts/threads that read like that.

#9

loell said: you can use fuzzy logic, neural nets and genetic algorithm?

yet you don't know what a bug is?

:-k something's not right :-k

+1 I am still wondering...

#10

Here's a nice resource - http://en.wikipedia.org/wiki/Netiquette

This is not to say we're offended or anything. This forum is for helping people out, and that's what we're doing :)

You already know a lot of stuff. I guess you'll be comfortable picking up any of the popular programming languages (Python is highly reccomended). Python has an excellent tutorial online at http://docs.python.org

To understand Open Source better (the culture, not the tech behind Open Source), Google for these documents -

  1. How to Ask Questions the Smart Way
  2. The Cathedral and the Bazaar
  3. The GNU Manifesto
#11

Another point; At the start you said you have no idea how to make programs, then go on to say "I already know and used, pascal, fortran, matlab & prolog". You can't really know a few languages and still not know how create programs. Do you mean you don't have a lot of experience?

#12

laplace/d said: Hi everyone! I'm posting because in the past months i've been captured by the linux world and i am fascinated. my problem is that i have no clue on how to write programs, applications, etc. and even if i knew, [...]

I see a problem there... what I understand from that OP's paragraph is that he/she wants to be a developer in order to be a GNU/Linux user. My interpretation may be of course wrong or OP also could have just been confused.

Dearest OP: You don't need to be a developer to run a desktop GNU/Linux distro like Ubuntu, Debian, Fedora, Knoppix, etc. Other distributions may need it (I'm not informed) but they surely aren't distros meant for the average people.

But, if you wanted to say that you want to start to be a developer, well, I guess you already know what programming is and you ferer "developing" to the "productive programming" or something like that. Well, a great point to start is Launchpad... create an account, install Bazaar from the repos ("bzr" package) and learn how easy it is to use... check projects you like or create one... etc. It0s really intuitive and it's even improving a lot.

#13

you can use fuzzy logic, neural nets and genetic algorithm?

yet you don't know what a bug is?

hahaha, i grasp the concept of bug, but i wanted a more technical and detailed definition... good point though but u would be very disappointed if u met my classmates, some of them have no idea what a bug is and never heard the word before.

#14

Caduceus said: Another point; At the start you said you have no idea how to make programs, then go on to say "I already know and used, pascal, fortran, matlab & prolog". You can't really know a few languages and still not know how create programs. Do you mean you don't have a lot of experience?

Indeed, that's what i meant!!!... i know i might have been obnoxious in the way i typed, i was falling asleep, my bad!

#15

nvteighen said: I see a problem there... what I understand from that OP's paragraph is that he/she wants to be a developer in order to be a GNU/Linux user. My interpretation may be of course wrong or OP also could have just been confused.

Dearest OP: You don't need to be a developer to run a desktop GNU/Linux distro like Ubuntu, Debian, Fedora, Knoppix, etc. Other distributions may need it (I'm not informed) but they surely aren't distros meant for the average people.

But, if you wanted to say that you want to start to be a developer, well, I guess you already know what programming is and you ferer "developing" to the "productive programming" or something like that. Well, a great point to start is Launchpad... create an account, install Bazaar from the repos ("bzr" package) and learn how easy it is to use... check projects you like or create one... etc. It0s really intuitive and it's even improving a lot.

I already know u don't have to be a developer in order to use GNU/Linux. I just wanted to say i wanna start writing and i qoute "productive programming"

#16

laplace/d said: hahaha, i grasp the concept of bug, but i wanted a more technical and detailed definition... good point though but

u would be very disappointed if u met my classmates, some of them have no idea what a bug is and never heard the word before.

This seems awfully suspicious to me. You don't even need to know a single thing about programming to know what a bug is. This is really strange. I really doubt that bugs aren't discussed in any formal programming/Computer Science classroom.

#17

namegame said: This seems awfully suspicious to me. You don't even need to know a single thing about programming to know what a bug is. This is really strange. I really doubt that bugs aren't discussed in any formal programming/Computer Science classroom.

http://www3.fi.mdp.edu.ar/electronica/ this is the website of the electronics engineering department at my school (National University of Mar del Plata in Argentina)... you can take a look at all the courses if u like. the website is in Spanish, so if u need help with that don't hesitate to ask. My major is in electronics, here it's a 5 year system, not 4 like in the states. i did 3 of those 5, the first 2 are basically math, and physics. in those first 2 years, which are common to all engineerings in my school, i also learned "computing basics" where we learned pascal, but we only did, variables, arrays, loops, conditionals, subroutines... that was my first encounter with programming, until then i had no clue what it was about. After that i took Numerical Analysis, where we learned a bunch of algorithms to solve equation systems, non linear equations, differential equations, etc, it was basically math and two weeks before ending the course, they presented fortran, explained some differences with pascal and we had to choose a problem and solve it using the algorithms we had learned and made the implementation in fortran. after that i took an elective where i did logical programming with prolog, and we did very basic things, the whole course was a very brief introduction to grasp the different paradigm and to write some code. Another elective i took was fuzzy logic, NN, and GA; again, here the focus was to grasp the concepts and we did some code on matlab (which i've used by myself for a while now), here's a sample btw http://www.youtube.com/watch?v=kQ5jlbsHfSk of something i did with fuzzy logic (i can give u the code). That's pretty much it if we talk about what i did in school. remember, 2 of the subjects i took where electives so not every student take them. As i said before here we have a 5 year system. on electronics, we learn Assembly language and VHDL but thats during the 4th year, which i'm starting on march. I did start with some assembly basics though, but very little. And until a friend of mine introduced me to linux i had no clue what the word bug meant, i might add that my native language is spanish.

#18

Now, focusing on the title of the thread, any more thoughts? Do u think Python and C, is the place to start?

#19

Please read the stickies. They include info for starting programming.

#20

slavik said: Please read the stickies. They include info for starting programming.

sory man i don't know what stickies are.

#21

Technical definition of "bug" is an insect getting stuck in the relays of your computer hardware, causing a malfunction.

...an analyzing process must equally have been performed in order to furnish the Analytical Engine with the necessary operative data; and that herein may also lie a possible source of error. Granted that the actual mechanism is unerring in its processes, the cards may give it wrong orders.

#22

In the thread list in the forum, all the way at the top, there is a section called "Sticky Threads", in that section are some threads whose names start with "Sticky: " You are interested in the first one entitled: "Sticky: Read Before Posting: Forum FAQ's, how to learn to program, and Linux programming"

Direct link to that thread for your convenience: http://ubuntuforums.org/showthread.php?t=1006666

#23

laplace/d said: Now, focusing on the title of the thread, any more thoughts? Do u think Python and C, is the place to start?

Python and C is an excellent place to start. But start only with Python and only if you see that there are features you need that are not available in python then learn C.

The best introduction to python I have found , beside the stickies in this forum, is here.

http://www.daniweb.com/forums/thread20774.html

It contains anything you to get started and do advanced stuff. Of course getting a book is also a good start , if like me you do not like to get stuck in front of a computer screen all day long.

#24

Kilon said: Python and C is an excellent place to start. But start only with Python and only if you see that there are features you need that are not available in python then learn C.

I recommend starting with C for the reasons I stated before: full access to all system libraries, syntactical similarity to at least three other important languages (C++, Java, C#).

#25

eye208 said: I recommend starting with C for the reasons I stated before: full access to all system libraries, syntactical similarity to at least three other important languages (C++, Java, C#).

I access powerful Java classes by Jython (exactly the same syntax as python) other access native windows .NET libraries by ironpython (exactly the same situation as Jython) , ignoring the fact that there are hundreder if not thousands libraries for python.

Why mess with C , C++ or Java syntax ? I do not see any advantage ,

#26

Kilon said: But start only with Python and only if you see that there are features you need that are not available in python then learn C.

To be honest, I can't for the life of me figure out any features C has that Python doesn't have. The whole point of C is its *lack* of features, so you can/must implement only those you need...

(Well ok, pointers, but as I have said repeatedly, semantically they are just array indexes with some additional properties!)

eye208 said: I recommend starting with C for the reasons I stated before: full access to all system libraries

A beginner needs this ... why? Besides, you can have full access to all system libraries through all kinds of foreign function interfaces in a variety of languages...

Kilon said:

Why mess with C , C++ or Java syntax ? I do not see any advantage ,

+1

#27

CptPicard said: A beginner needs this ... why?

Linux, its libraries, and most of its applications are written in C. Understanding C is the key to understanding Linux. Even if you don't actually write software yourself, C knowledge will help you build other people's software from source, resolve dependencies, fix bugs, understand the meaning of include files and library paths, static vs. dynamic linkage etc.

Python is useful too but optional. C is the one language you really can't do without sooner or later, so it's not a bad idea to learn it first. Unlike Python which has just recently broken backwards compatibility to earlier versions of itself, C has seen only a few minor extensions in almost 40 years. There is no replacement for C. It's the bread and butter of programming, especially on Linux.

Once you know C, learning C++, Java and C# will be a walk in the park. And once you know all of these, you'll be qualified for pretty much any serious programming job in the industry. Take a look at the TIOBE Programming Community Index to see what I mean.

#28

eye208 said: .. C knowledge will help you build other people's software from source, resolve dependencies, fix bugs, understand the meaning of include files and library paths, static vs. dynamic linkage etc.

...

Once you know C, learning C++, Java and C# will be a walk in the park. ...

Or you could start with Java which has an added advantage of being run in a Virtual Machine, so you basically don't ever care about the underlying OS. It's also strictly object oriented, unlike, say, Python.

I'd say for a start in programming, you really don't wanna be doing any messing with system libraries and such.

#29

eye208 said: Linux, its libraries, and most of its applications are written in C. Understanding C is the key to understanding Linux. Even if you don't actually write software yourself, C knowledge will help you build other people's software from source, resolve dependencies, fix bugs, understand the meaning of include files and library paths, static vs. dynamic linkage etc.

Python is useful too but optional. C is the one language you really can't do without sooner or later, so it's not a bad idea to learn it first. Unlike Python which has just recently broken backwards compatibility to earlier versions of itself, C has seen only a few minor extensions in almost 40 years. There is no replacement for C. It's the bread and butter of programming, especially on Linux.

Once you know C, learning C++, Java and C# will be a walk in the park. And once you know all of these, you'll be qualified for pretty much any serious programming job in the industry. Take a look at the TIOBE Programming Community Index to see what I mean.

Ok I respect your opinion you have some valid points there.

But, learning a language syntax is only 10% of the process, the other 90% is the libraries that work with the language. Sure UBUNTU for better or worse is written on C++ , so is MACOS, so is Windows etc.

But I think you need to assess the situation and ask yourself . " Even if the whole world uses C++, even if I am the only person on planet who think of using python, should I really use C++ ? "

One thing I learned , from studying law ( I am a lawyer) , which is a huge pain in the ----, is to start from easy then proceed to something more complex. It so easy, I emphasize again , so easy to feel overwhelmed.

So I ask again . Why mess with C++ or JAVA or whatever if first you do not make certain that python cannot do the stuff you want the way you want it. Taking account the fact on how much less code you would write and the time you will avoid spending is not difficult to see that python is ideal for programmers that code alone.

Now some people , hate python syntax, or for a personal reason python is not good for them . Fair enough then you can move on using python with C++ , or if that does not work also , then maybe learn JAVA or D which is easier and if that does not work also then go to C++.

C++ is an old language, and its age is really obvious when you start coding. But some people love coding in C++,or code C++ out of necessity who am I to prevent them from doing so ?

#30

If you want to develop it will most probably be in C, C++ Unless: you want to make your own project in which case python may be a good idea.

My suggestion (if you have time): Learn python and when you have concured that: Move to C.

If you have no time: Get a copy of "C for dummies" That'll teach you C from the begining.

If you learn python (I'd recommend it, just to learn how programing works) then learn from a free book: "snake wrangling for kids" There's a version written for Mac, PC and Linux. That'll help teach you all about scripting in general and python.

#31

eye208 said: Even if you don't actually write software yourself, C knowledge will help you build other people's software from source, resolve dependencies, fix bugs, understand the meaning of include files and library paths, static vs. dynamic linkage etc.

If you're going to do anything of the sort, yes, you're writing software yourself. It's a myth that a non-developer is going to be fixing bugs... :)

Python is useful too but optional. C is the one language you really can't do without sooner or later, so it's not a bad idea to learn it first.

The problem is the fact that C is so rudimentary that if you start with it, you might learn to fiddle with pointers but you're *still* missing all the bigger-picture building blocks and concepts that programming is fundamentally about. Pointers are optional, knowing how to approach a problem on programming terms is not, and C teaches you nothing about that beyond basic control constructs. For everything else, you're fumbling in the dark.

Unlike Python which has just recently broken backwards compatibility to earlier versions of itself, C has seen only a few minor extensions in almost 40 years.

Python is a much younger language, and at this point of its development it can afford that kind of a break where lessons learned can be applied. It's actually remarkable how little needs to be improved.

There is no replacement for C. It's the bread and butter of programming, especially on Linux

Well, *any* language that is able to be compiled into Linux-style binaries is a perfectly good replacement, really. For all I care, we should be running Lisp machines anyway :p

Once you know C, learning C++, Java and C# will be a walk in the park.

I'm not all that sure of that either. A lot of competent use of object-oriented languages comes from being able to apply OO-design patterns to problems (having to do so is a bit of an issue in itself, but I digress...). Putting it in very broad terms, C is just a very limited subset of those languages (essentially just the handful of basic control constructs), and those can be learned very quickly in the process of learning the other bits of those languages, while doing C doesn't teach you any of those, and makes you manage memory instead which really should be a secondary exercise especially for a learner...

If I ever end up hiring new people to this one man show of a company of mine, I am most definitely looking for someone who is insightful and enthusiastic about higher-level language features even though they might never have used C, as I believe learning C should be a triviality for them... the other way around I am not so sure. There would a lot of new thinking to learn and some things to unlearn for those guys. Actually, a key job-interview question would be "please explain what a closure is and what you can use it for" :)

Now, it should be said that I am not dissing C per se -- it *is* an important part of toolbox -- but I simply disagree with the "conceptual hierarchy" especially as suggested for a beginner to follow...

#32

Also we should not forget that pretty much the same argument , poped up when JAVA appeared.

"JAVA is this a serious name?"

"but it is so new ! there are no libraries why bother ? OSs and serious applications are build with C++"

"it is more web orientated than desktop orientated !"

"JVM oh my god that would be so slow !"

and after it became hugely popular , should I say more popular than C++. Then Microsoft release .NET and people rushed into proclaiming "JAVA IS DEAD" . And now we are in 2009 and JAVA is live and kicking. As someone claimed in a blog JAVA is the UNDEAD of programming languages.

Lesson learned ! Popularity means nothing !

#33

Kilon said: Popularity means nothing !

Popularity is an interesting measure when it comes to programming languages... now, on one hand I tend to believe that there is something objective to programming languages in the sense that if more people find some languages appealing they are doing something right -- this is why INTERCAL is "obviously" seen as a joke language.

Then again, popularity can mean that it just appeals to the masses, that is, the average programmer. An unpopular language can just be one that is appreciated only by those who are more competent than most... I tend to believe this is the case with Lisp, for example -- for some strange reason the best hackers I know are *all* Lisp fanatics...

#34

When I said popularity means nothing I did not mean it in market kind of way. Obviously popularity and marketing is everything. SUN bombarded the computer world with the "importance" of JAVA for anything . That really worked in its favor. It followed the usual Microsoft tactics.

JAVA became hugely popular and attracted masses of programmers who build an amazing amount of libraries for just about everything.

That is very good. But still you need to overcome the difficulty of syntax. What use is a huge library if you quit making the program because the syntax proves to be too cumbersome ? Then Popularity loses all its meaning.

I am strictly talking single programmers here or small teams of programmers. Companies think differently and they have their reasons.

#35

CptPicard said: The problem is the fact that C is so rudimentary that if you start with it, you might learn to fiddle with pointers but you're *still* missing all the bigger-picture building blocks and concepts that programming is fundamentally about. Pointers are optional, knowing how to approach a problem on programming terms is not, and C teaches you nothing about that beyond basic control constructs. For everything else, you're fumbling in the dark.

C is good for beginners _exactly because_ it is rudimentary. You learn programming not by calling public methods of complex objects that someone else designed and optimized. You learn programming by designing and optimizing those objects and methods yourself. You will never know how efficient sorting algorithms work until you implemented one yourself. You won't understand complex data types such as linked lists, maps, trees etc. until you "fiddled with pointers".

If you cannot solve a problem in C, it's not because the language is rudimentary but because _you don't know_ how to solve it. All you know is how to import someone else's solution as a black box and call it with a script. And that solution will most likely be written in C.

#36

eye208 said: C is good for beginners _exactly because_ it is rudimentary. You learn programming not by calling public methods of complex objects that someone else designed and optimized. You learn programming by designing and optimizing those objects and methods yourself. You will never know how efficient sorting algorithms work until you implemented one yourself. You won't understand complex data types such as linked lists, maps, trees etc. until you "fiddled with pointers".

If you cannot solve a problem in C, it's not because the language is rudimentary but because _you don't know_ how to solve it. All you know is how to import someone else's solution as a black box and call it with a script. And that solution will most likely be written in C.

I couldn't disagree more. You can do bigger and better things with stuff like Java or C# from the get go. Personally, when I started out, I was really interested in creating guis. Command line is fun and all but every programmer who starts out wants to see a window that says Hello, World and say - hey I made that!

Point is, if a problem can be solved in C, it doesn't necessarily mean it should be solved in C. I feel that modern languages have a lot more appeal to a programmer who is starting out. Because you can get easily confused and lost in C (pointers come to mind again) and start thinking - is that all there is?

#37

eye208 said: Linux, its libraries, and most of its applications are written in C.

I think you are confusing Linux the kernel and Linux the OS. Kernel is in C, but majority of apps are in languages other than C, and for one good reason: C is optimized for writing OS, and makes developer work too hard for average app. It is too low level to be productive, and in many cases the speed is not crucial.

eye208> Understanding C is the key to understanding Linux.

Linux the kernel? most people do not care about the kernel, just run it.

eye208> Even if you don't actually write software yourself, C knowledge will help you build other people's software from source, resolve dependencies, fix bugs, understand the meaning of include files and library paths, static vs. dynamic linkage etc.

why would someone who does not 'actually write software' even bothered to understand what are you talking about? Python is especially useful for people who do not write software for living, but need to process some data, and explaining the process to professional programmer (and paying for her time) is just too much for them.

eye208> C is the one language you really can't do without sooner or later, so it's not a bad idea to learn it first.

Many people can use computers (some little script on the side) without knowing deep magic of C memory management.

Python is simpler than C (by design), and obviously learning simpler concept before complex is more productive way of learning.

eye208> Unlike Python which has just recently broken backwards compatibility to earlier versions of itself, C has seen only a few minor extensions in almost 40 years.

... because C is so trivial that there is not much to evolve. Python's syntax sugar allow to solve problems on substantially higher conceptual level. With C, you are forced all the time to think about the exact type. Python uses much more generic approach, compare loops through file, sequence, array, dictionary, generator expression - they look exactly same in Python. And please don't spread FUD about broken backward compatibility, it is a non-problem, and almost-automagic conversion tools are available.

eye208> There is no replacement for C. It's the bread and butter of programming, especially on Linux.

And this is relevant to a beginner how?

C is excellent second language but friends don't let friends to start learning programming in C :-)

eye208> Once you know C, learning C++, Java and C# will be a walk in the park.

Really? OOP and using proper design patterns is IMHO harder than simple coding (because you work on higher abstraction level, so it is harder to feel what is happening, and what would be the consequences of every decision). When learning C++ or Java, you need to unlearn some C tricks.

And once you know all of these, you'll be qualified for pretty much any serious programming job in the industry. Take a look at the TIOBE Programming Community Index to see what I mean.

You completely ignore fastest growing app sector - web-bases apps. For them, any statically typed language is overkill, and Python is much better solution. Same with systems administration: Python is main production language in Google, managing hundreds of thousands of servers.

Of course C, C++ and Java are marked higher in TIOBE, but check how the number is calculated. Ie there are less Python books for sale, because Python has so many free e-books. many books is not the feature but the bug: you need more books (more time and money sinked in) to become average competent.

#38

SupaSonic said: Or you could start with Java which has an added advantage of being run in a Virtual Machine, so you basically don't ever care about the underlying OS. It's also strictly object oriented, unlike, say, Python.

I'd say for a start in programming, you really don't wanna be doing any messing with system libraries and such.

how 'not caring about underlying OS' helps anyone to become a developer for that OS?

Java was a solution for a problem (avoiding MSFT vendor-lock) what was urgent in mid 90ties when more than a dozen computer platforms were competing, so reinventing whole universe by creating new platform made sense. But that problem ceased to exist: there are just two platforms: MSFT and Free Software, and Java is weirdly positioned in between. And the extra layer of abstraction just add unnecessary complexity with little gain.

And don't get me started about OOP in Java: Java is not object-oriented, Java is object-obsessed :-) One of main reasons why I recommend Python over Java for beginners is that with Python, programmer can learn basic (and be happy and productive) without being confused by all that OOP mumbo-jumbo, and learn OOP later, when it makes sense and can be really useful.

#39

Sorry but when it became an advantage the fact that a language does not change ?

Sorry but is there a thing in this life that is irreplaceable ?

Once learning C , learning JAVA is going to be a walk in the park ? Are you not aware that Java is a huge "park" ? as probably is any language out there. Moving from Java to C++ is going to be a huge move.

Hey shoudl I mention the example of Visual basic programmers moving to VISUAL BASIC .NET , they also though like you that it would have been a walk in the park. They unlike you had advantage of staying in the same language. Boy they were for a BIG SURPRISE. You cannot imagien their frustration when they saw that VISUAL BASIC .NET was a whole new world!

#40

CptPicard said: Then again, popularity can mean that it just appeals to the masses, that is, the average programmer. An unpopular language can just be one that is appreciated only by those who are more competent than most... I tend to believe this is the case with Lisp, for example -- for some strange reason the best hackers I know are *all* Lisp fanatics...

Or Forth, which is squarely focused on above-average programmer. It does not protect programmer from many errors, but this allows to gain a lot of flexibility.

seems like we got here another case of blub programmer (not CptPicard :-) ). Whole point of Java (from POV of PHB) is that there are hordes of fully replaceable average 'cog programmers' (a notch above code monkey) available on the market.

Recommended reading: Beating the Averages

#41

eye208 said: C is good for beginners _exactly because_ it is rudimentary. You learn programming not by calling public methods of complex objects that someone else designed and optimized. You learn programming by designing and optimizing those objects and methods yourself. You will never know how efficient sorting algorithms work until you implemented one yourself. You won't understand complex data types such as linked lists, maps, trees etc. until you "fiddled with pointers".

Will you learn driving by building your own car with automatic transmission? Or to make it simpler, manual transmission?

Learning to use fundamental concepts is different from implementing them. The Humble Programmer by Edsger W. Dijkstra explained it one and for all (in 1972). To became productive we need to use higher layers of abstractions, with mental model simple enough to fit into our brains. C models are simple but not powerful - you need substantially more lines of code to implement same thing, and it is well known that productivity in KLOC is about the same, regardless of the language used.

If you cannot solve a problem in C, it's not because the language is rudimentary but because _you don't know_ how to solve it. All you know is how to import someone else's solution as a black box and call it with a script. And that solution will most likely be written in C.

or maybe because human brains has hard time to handle so many levels of abstraction. Home builder is not concerned about photosynthesis which created sugars which form cell walls of the plants: he buys planks for house :-)

Yes, from Python is trivial to call C libraries, but it is not bug but the feature :-)

#42

eye208 said: If you cannot solve a problem in C, it's not because the language is rudimentary but because _you don't know_ how to solve it. All you know is how to import someone else's solution as a black box and call it with a script. And that solution will most likely be written in C.

So when you code in C you write all your functions do you? Even replacements for those in the standard libraries, since using them is as you put it "import someone else's solution".

Libraries exist to make a programmers job easier, you don't reinvent the wheel just to prove that you can.

#43

You guys never seem to get tired of arguing on these forums :)

#44

ajackson said: So when you code in C you write all your functions do you? Even replacements for those in the standard libraries, since using them is as you put it "import someone else's solution".

Libraries exist to make a programmers job easier, you don't reinvent the wheel just to prove that you can.

The guy has a very good point and he is a babylon 5 fan. He deserves a thanks.

#45

eye208 said: You learn programming not by calling public methods of complex objects that someone else designed and optimized.

You make the mistake of imagining that higher-level languages are all about just using libraries and syntactic sugar... which is of course not at all the case. I really, really do not understand where you guys get this crazy notion.

Not only do you first learn to use the correct components before implementing them yourself, you can and will more easily get into the algorithmic implementation side of things when time comes. High-level languages do not keep you from learning those things, quite the contrary.

You learn programming by designing and optimizing those objects and methods yourself. You will never know how efficient sorting algorithms work until you implemented one yourself. You won't understand complex data types such as linked lists, maps, trees etc. until you "fiddled with pointers".

That is complete nonsense. Algorithmic concepts are completely language-indepedent, and there is nothing that says that you *must* use C to learn them. As a matter of fact, when teaching those concepts, you want a language that most cleanly demonstrates the idea behind the concept. Sorting algorithms are an excellent case in point -- they are *much* more clearly demonstrated in a functional language such as Scheme than in array-index-manipulation form!

A linked list is a cool example too, because there is absolutely no need for pointers to make them. Actually, the simplest linked list I can think of off the top of my head is a list of nested closures, which doesn't even need any explicit data structure...

Most importantly, algorithmic choices always dominate constant-factor issues such as arise due to the speed differential of C vs. some other higher-level language. This means that HLLs' ability to abstract and implement the better algorithm can and should be used to get the "important and significant" speed improvement...

If you cannot solve a problem in C, it's not because the language is rudimentary but because _you don't know_ how to solve it.

Fighting words... :) As I said, algorithms are language-independent abstractions that can and should be understood independent of the language. And this discussion is exactly why they need to be taught with an abstract language -- at least we'd avoid these sorts of misconceptions taking root.

#46

pmasiar said: I think you are confusing Linux the kernel and Linux the OS. Kernel is in C, but majority of apps are in languages other than C

No. Let's look at some numbers. This is what Wikipedia writes about GNU/Linux:

A 2001 study of Red Hat Linux 7.1 found that this distribution contained 30 million source lines of code. Using the Constructive Cost Model, the study estimated that this distribution required about eight thousand man-years of development time. According to the study, if all this software had been developed by conventional proprietary means, it would have cost about 1.08 billion dollars (year 2000 U.S. dollars) to develop in the United States.

Most of the code (71%) was written in the C programming language, but many other languages were used, including C++, assembly language, Perl, Python, Fortran, and various shell scripting languages. Slightly over half of all lines of code were licensed under the GPL. The Linux kernel itself was 2.4 million lines of code, or 8% of the total.

In a later study, the same analysis was performed for Debian GNU/Linux version 4.0. This distribution contained over 283 million source lines of code, and the study estimated that it would have cost 5.4 billion Euros to develop by conventional means. And these are the numbers for Debian 4.0:

4.2 Programming languages

The number of physical SLOC, classified by programming language, are (roughly rounded) as follows (numbers for Debian source packages):

Below 0.5% we find some other languages: Ada (0.46%), ML (0.42%), Objective C (0.39%), YACC (0.25%), and other below 0.1%.

  • C: 145,278,000 SLOC (51%)
  • C++: 52,983,000 SLOC (18.7%)
  • Shell: 29,327,000 SLOC (10.4%)
  • Java: 8,969,000 SLOC (3.17%)
  • PERL: 8,074,000 SLOC (2.85%)
  • LISP: 7,659,000 SLOC (2.7%)
  • Python: 7,219,000 SLOC (2.55%)
  • Assembler: 4,121,000 SLOC (1.46%)
  • PHP: 3,270,000 SLOC (1.15%)
  • FORTRAN: 2,678,000 SLOC (0.95%)
  • C#: 2,336,000 SLOC (0.83%)
  • Pascal: 2,240,000 SLOC (0.79%)
  • TCL: 1,635,000 SLOC (0.58%)

In figure 1 we can view the importance of main languages versus the rest. It is consistent with the fact that most packages are written in C. C++ is another language present in most packages, and it is the main language in some of them (such as Openoffice.org or Iceweasel). The same fact occurs with Lisp, which is the main language in several packages (such as Emacs), but is also used in most of rest packages. Next, shell scripts are used to support configuration and other auxiliary task in most packages. As you can see, between 2001 and 2007 the numbers have somewhat shifted towards C++, but C is still at the top. However, the claim that Python plays a significant role as a high-level programming language has no base in reality. It is wishful thinking by fanboys.

why would someone who does not 'actually write software' even bothered to understand what are you talking about? Python is especially useful for people who do not write software for living, but need to process some data, and explaining the process to professional programmer (and paying for her time) is just too much for them.

I am not denying that. But the thread starter explicitly stated that he wants to become a developer for GNU/Linux. So I pointed him at the GNU Coding Standards and advised him to learn the language that is the most popular one on Linux. And that is not Python. Not by a long shot. "Popular" means there is a huge amount of existing code he can look at or even borrow from to get things done.

Many people can use computers (some little script on the side) without knowing deep magic of C memory management.

Yes of course. But a driver's license is not enough if you want to build cars.

Python is simpler than C (by design), and obviously learning simpler concept before complex is more productive way of learning.

Not even your fellow Python fanboys would agree with that statement. Python is much more complex than C. If you want to go from simple to complex, start with C and then turn to C++ (or Java or C#) because C is a subset of these. On the other hand, Python is a subset of what? Its syntax is similar to what? You get my point.

... because C is so trivial that there is not much to evolve.

Do you realize that you called C both trivial _and_ complex within the same post? ;)

You completely ignore fastest growing app sector - web-bases apps.

No, I didn't. The most frequently used language in this sector is Java, not Python. But even if I did ignore this, it wouldn't matter because the thread starter didn't ask for it anyway. He wants to develop applications for Linux.

#47

I am not denying that. But the thread starter explicitly stated that he wants to become a developer for GNU/Linux. So I pointed him at the GNU Coding Standards and advised him to learn the language that is the most popular one on Linux. And that is not Python. Not by a long shot. "Popular" means there is a huge amount of existing code he can look at or even borrow from to get things done.

So if I understand you correctly if tomorrow , the whole UBUNTU/LINUX thing converts to Assembly , you are going to advice Assembly as the first language to a beginner/ experienced UBUNTU developer.

Hmm interesting stuff :popcorn:

#48

wow! i'm truly amazed on how fast i got a lot of info and things to start playing with. maybe i misunderstood the concept of developer. i would like to become a programmer first and start playing with coding and do some personal stuff and even put it out there on the net after that. the idea of becoming a developer sounds appealing, but first i would like to suit my own needs. before i ever take a look at the kernel's source code, if i ever get there, as i said i would like to start with my very personal projects and even then, if i wanna move forward, making applications for GNU/Linux sound more appealing to me. but i'll just wait and see, i can always change my mind.

#49

eye208 said: C is good for beginners _exactly because_ it is rudimentary. You learn programming not by calling public methods of complex objects that someone else designed and optimized. You learn programming by designing and optimizing those objects and methods yourself. You will never know how efficient sorting algorithms work until you implemented one yourself. You won't understand complex data types such as linked lists, maps, trees etc. until you "fiddled with pointers".

If you cannot solve a problem in C, it's not because the language is rudimentary but because _you don't know_ how to solve it. All you know is how to import someone else's solution as a black box and call it with a script. And that solution will most likely be written in C.

This is incredible. Of course, optimization and design are stuff all programmers should know... but it's just a part of programming, not programming. You learn programming by understanding how different semantical pieces are able to play together in order to describe something and them simulate it... And that's language-independent. C is there when you need to tweak the "simulator" (the computer) or describe a process inherent to a computer...

Yes, you only learn what a "linked list" is when you do it in C... of course: there are no lists in C. Go to Lisp and you have "lists", and you don't care if it is "linked" or not... Even in C, after you have implemented your "linked list", the only fact you care about is that it is a list you can use to list stuff. Trees and such, instead, are another story, but you can implement them in other languages.

#50

eye208 said: No. Let's look at some numbers.

Shift away from C is even more prominent that I expected. Considering that old C code just grows and accumulates patches until someone throws it out, and still only 51% is in C!

eye208> However, the claim that Python plays a significant role as a high-level programming language has no base in reality.

Considering that 1 line of Python is analog to 5 lines of C or C++, C++ is being overcame by Python :-) Thanks for your numbers.

eye208> It is wishful thinking by fanboys.

You are quite new around, so I'll just warn you. Those are fighting words, and you will be advised not to repeat them here, unless you want flamewar. Facts, opinions, spin are OK. Flames are not.

eye208> But the thread starter explicitly stated that he wants to become a developer for GNU/Linux.

... and I pointed him to simplest way to make contribution as coder.

eye208> advised him to learn the language that is the most popular one on Linux. And that is not Python. Not by a long shot.

Just curious, are you aware that Python is "official" language in Canonical and ubuntu development, favorite language of sabdfl Mark?

eye208> "Popular" means there is a huge amount of existing code he can look at or even borrow from to get things done.

It depends of the area of course, but there are (according to your own numbers) plenty of Python code to borrow from. And Python code is notoriously easier to read and comprehend.

eye208> Python is much more complex than C.

It depends how you define complexity. Python (as high level language) is closer to problem area. Statements are simpler, more intuitive (especially for beginner), consider for loop.

eye208> If you want to go from simple to complex, start with C and then turn to C++ (or Java or C#) because C is a subset of these. On the other hand, Python is a subset of what? Its syntax is similar to what? You get my point.

No I don't. I have first-hand experience explaining programming to beginners. C++ or Java is way too obfuscated for that.

eye208> Do you realize that you called C both trivial _and_ complex within the same post? ;)

C is trivial for someone (like you) who has programming experience, but is complex for a beginner because it makes her to work harder to make simple code run.

I am curious why you refuse to see that. Assembler is even more trivial (building code from simpler blocks), but creating programs in it is even more complex. Did you bothered to read "Humble Programmer" link above? Or you dismiss Dijkstra as a clueless fanboy?

eye208> No, I didn't. The most frequently used language in [web app] sector is Java, not Python.

That's just historical artifact - most lines of code may mean that it takes more code to accomplish anything in Java :-)

eye208> [OP] wants to develop applications for Linux.

What kinds of app? And what exactly OP means by 'Linux'? You have much better ESP than I do :-) but my experience with beginners suggests me the route you so vehemently disagree.

Edit: as i said i would like to start with my very personal projects and even then, if i wanna move forward, making applications for GNU/Linux sound more appealing to me.

So looks like Python and not C would be best choice, don't you think so? Or you consider OP to be also Python fanboy, part of the cabal?

#51

eye208 said: As you can see, between 2001 and 2007 the numbers have somewhat shifted towards C++, but C is still at the top.

I wouldn't class a 20% drop as "somewhat shifted" but yes C is the most used language based on those figures. A question, do those figures include all of the packages available or the core of the system and various now standard applications? If it is more the core then, for legacy reasons, I would expect C to be a strong contender as a lot of it pre-dates the rise in use of the newer higher level languages.

However, the claim that Python plays a significant role as a high-level programming language has no base in reality. It is wishful thinking by fanboys.

Using the term fanboy makes you look childish, it is not a reasoned response. For a lot of new programmers, languages like Python are more likely to be used as introductory languages. When I went to college and then university some 18 years ago I started with Pascal because it is an easy to use and learn language, then COBOL as it was still widely used back then (and still is with some banking institutions) before hitting lower level languages like C and assembler at university.

Not by a long shot. "Popular" means there is a huge amount of existing code he can look at or even borrow from to get things done.

Popular means nothing of the sort but using your definition of popular then you'd have to acknowledge that Python is a popular language because there is a huge resource of code snippits and information available on the internet.

Not even your fellow Python fanboys would agree with that statement.

Again don't use terms like fanboy, it makes your argument look a lot weaker as it is generally used as an insult to the people in question. Resorting to personal insults when attempting to debate is a classic sign of not being able to debate.

start with C and then turn to C++ (or Java or C#) because C is a subset of these.

Pardon? Did you really type that? C++/Java/C# evolved from C, taking a lot of it's good points and trying to replace some of it's bad points.

On the other hand, Python is a subset of what? Its syntax is similar to what? You get my point.

I don't get your point, why should not being a subset make a language poor. The majority of programming is knowing how to program, once you master than translating it into code becomes a lot easier.

A good design can become a poor solution to a problem but a poor design can't become a good solution to a problem. Planning, understanding the concepts and building blocks of development is the key to being a good programmer and all of them are language independent.

#52

nvteighen said:

Yes, you only learn what a "linked list" is when you do it in C... of course: there are no lists in C. Go to Lisp and you have "lists", and you don't care if it is "linked" or not... Even in C, after you have implemented your "linked list", the only fact you care about is that it is a list you can use to list stuff. Trees and such, instead, are another story, but you can implement them in other languages.

Well, a linked list is a linked list where-ever you have recursive structure where "a thing" refers to another similar "thing", until the reference signifies some kind of termination of the structure. That is the important concept, and it extends all the way to trees, graphs... I guess you mean that in C it is somehow more specially "linked" whereas in Python for example you have a specific list type and notation.

The "linked" list in Lisp is somehow very cool in this regard as it very explicitly demonstrates the recursive nature of the thing through the nested cons pairs.

#53

Well if you think of it , there is nothing wrong in the meaning of the word "fan". Afterall you cannot be fan to something that it does not impress you and make you feel excited.

So maybe the term Fanboy is a bit meaningless. I thing "fanatic" would have been more appropriate.

If you have been around like me , you will remember the times that if you did not know assembly you were not a serious programmer. The days has passed because langaugew came that could do what Assembly did but easier and faster.

The FACT is that less people using C++ nowdays. JAVA has stolen alot of the C++ crowd , now .NET is stealing equally the same and languages like python are coming to steal the rest. C++ days are not numbered but it is a language that is constantly declining. Slowly but it does decline. It does so because it did not embrace change. And as all thing that do not embrace change are doomed to fail.Long are the days when C++ was the undisputed King.

Why is still alive and so popular ? Because we live in a world too lazy to change. But change is not something you can stop. It is like water. It may seem soft but in then end it will crash you.

#54

CptPicard said: Well, a linked list is a linked list where-ever you have recursive structure where "a thing" refers to another similar "thing", until the reference signifies some kind of termination of the structure. That is the important concept, and it extends all the way to trees, graphs... I guess you mean that in C it is somehow more specially "linked" whereas in Python for example you have a specific list type and notation.

The "linked" list in Lisp is somehow very cool in this regard as it very explicitly demonstrates the recursive nature of the thing through the nested cons pairs. Ok, the Lisp example may be bad, as you use cons pairs to build your list...

What I meant is that when you design one of those data structures, what you precisely want is to forget the implementation... once you created it, you use it as the concept ("list") as it was thought ("list"), not as it was implemented ("linked list"). Therefore, though learning C will teach you how to build that linked list, you have to be aware that it will teach you just that, an implementation detail.

#55

Sorry to disagree this strongly with you, mr. esteemed and highly respected linguist, but... ;)

nvteighen said: though learning C will teach you how to build that linked list, you have to be aware that it will teach you just that, an implementation detail.

C will teach you how to specifically *build a linked list in C*. It teaches you a particular way to do a linked list, but nothing more. The linked list really is anything that uses a reference of any kind to refer to another list node... it can take many forms and still be a perfectly good linked list.

#56

SeanHodges said: You guys never seem to get tired of arguing on these forums :)

The most bizarre thing is that every time it is exactly the same argument.

#57

mike_g said: The most bizarre thing is that every time it is exactly the same argument.

That's because it's always September and on the other hand some people never learn :(

#58

Kilon said: Well if you think of it , there is nothing wrong in the meaning of the word "fan". Afterall you cannot be fan to something that it does not impress you and make you feel excited.

So maybe the term Fanboy is a bit meaningless. I thing "fanatic" would have been more appropriate.

That new guy choose to use "fanboy" and choose it as an opening salvo in a flamewar, IMHO. And the only way to not get involved AFAIK is to call his trick, and respond on the matter (with opinion and spin, of course :-) ).

We here in UF-PT learned from past flamewars, let the new guy learn too. We don't want flamewars, but we also don't want new posters to be confused by posters who are willing to start a flamewar.

It is called "acculturation" as maybe in time the Eternal September will come to a timely end. One can hope?

And someone can be fan of something and not be a fanboy. Especially if that special something in fact is superior :-)

#59

mike_g said: The most bizarre thing is that every time it is exactly the same argument.

but every time it is new person, coming for the same punishment :-)

And it is different spin every time, so I need to read the post and occasionally even learn something. Ie I was surprised that C is now only 51% of the code, and Python is about 20% of what C++ is, and almost as big as Java. With compactness of Python, it is HUGE!

one may think they will read stickies... but no, stickies are only for people who don't need them...

#60

CptPicard said: Sorry to disagree this strongly with you, mr. esteemed and highly respected linguist, but...

Thank you

C will teach you how to specifically *build a linked list in C*. It teaches you a particular way to do a linked list, but nothing more. The linked list really is anything that uses a reference of any kind to refer to another list node... it can take many forms and still be a perfectly good linked list.

OK, I see my mistake. Thanks!

#61

pmasiar said: but every time it is new person, coming for the same punishment :-)

And it is different spin every time, so I need to read the post and occasionally even learn something. Ie I was surprised that C is now only 51% of the code, and Python is about 20% of what C++ is, and almost as big as Java. With compactness of Python, it is HUGE!

one may think they will read stickies... but no, stickies are only for people who don't need them...

Well people can get a bit emotional sometimes. I don't think it was his intention to start flame war.

And to be true to you , I don't mind "Trolls" I get really really pissed with people screaming "Oh my god he is a Troll" " Oh my GOD he is a troll". Ok so you fight in the forum ,so what ? Big deal , two days from now it will be forgotten , get over it.

People tend delete the gap between "awlufl" and "worse". Ok so we say here that pointer and personal memory management is so last decade , so what ? Are we saying that C++ is awful , or maybe useless ? Of course not.

Maybe some people , even a beginner will love how C++ works and create an intense relationship with the language. The best you can do is enjoy yourself and have fun with what you are doing . If C++ makes you excited then do C++. I am sure you will make amazing code.

Also please.... please .... stop this obsession with the stickies. It is not the golden place of knowledge, it is just another bunch of tutorials. It is perfectly ok some people to ignore the stickies and come and ask their questions here. Some people may not see the stickies, may not know what the hell a sticky is, or may not like stickies and prefer a more "personal" contact through forum.

#62

nvteighen said: when you design one of those data structures, what you precisely want is to forget the implementation... once you created it, you use it as the concept ("list") as it was thought ("list")

That's exactly the point what people suggesting C/Java for beginners refuse to recognize: higher level languages allow 'humble programmer' to use more efficient mental models to describe the task to be solved.

In Python, you have array=list which is implemented as resizable flexarray, and you don't care. Try sometimes explain to a beginner the difference between array, linked list, and flexarray (ArrayList in Java). Of course there are subtle differences in performance, but can you see their eyes just glazed over? They have hard time to get for loop right, and you want to bother them with difference between updating array and list. And if flexarray is almost as efficient as classic array (and checking for borders prevent important class of runtime security problems), why would anyone care at all? Unless you need to squeeze last 5% of performance out of CPU, there are better ways to optimize - let compiler and runtime support to do heavy lifting, so you can focus on problems which compiler cannot solve.

And how you can expect being paid for work what compiler can do for free, and better? I am afraid that people promoting such approach have either little or no industry experience, or they don't have job and want yours (giving away knowingly wrong advice to make others unproductive) :-)

#63

Kilon said: It is not the golden place of knowledge

Yes, it indeed *is *the golden place of knowledge. The most important discussions here have been summarized there, so people better read them for their own good.

#64

Kilon said: The FACT is that less people using C++ nowdays. JAVA has stolen alot of the C++ crowd , now .NET is stealing equally the same and languages like python are coming to steal the rest. C++ days are not numbered but it is a language that is constantly declining. Slowly but it does decline. It does so because it did not embrace change. And as all thing that do not embrace change are doomed to fail.Long are the days when C++ was the undisputed King.

Sorry, but this is just nonsense. When C embraced change, the result was C++. When C++ embraced change, the results were Java, C#, and D. But the fact is that languages with a syntax that deviates too far away from C always had a hard time gaining acceptance. That's just the way it is.

The .NET framework is a perfect example. There you have two languages that are functionally identical, one with a C-like syntax (C#), the other with a syntax targeted at beginners (Visual Basic). Both languages compile against the .NET runtime, both languages can do the same things. Guess which one of them is immensely more popular than the other? Yup, it's C#. The TIOBE index doesn't show this yet because it mixes VB.NET with VB6 which is unrelated to .NET. Once you remove VB6 from the picture, the trend is obvious.

And that is why I recommend beginners to learn C# instead of Visual Basic if they want to go the .NET route. Being accustomed to a C-like language, no matter if it is C#, Java, C++ or C itself, opens up many doors because the shift from one to another is easy. You don't have to learn a new syntax from the ground up if you switch. This is a reality that Python fans just have to acknowledge. You can't change the world by pretending that it already has changed. All you can do is use Python to write lots of applications that people want to use, so that the numbers change in your favor. But right now, the programming world is dominated by C-like languages. C itself has lost ground only in favor of its successors. Python however has remained marginal for 18 years.

I remember a time when Pascal was very popular. Everyone recommended it as a language for beginners. There were similar arguments, similar comparisons, surveys, and of course flamewars.

Look where Pascal is now. It's gone. Almost completely irrelevant, despite the fact that there is now a free Object Pascal compiler available.

#65

eye208 said: Sorry, but this is just nonsense. When C embraced change, the result was C++. When C++ embraced change, the results were Java, C#, and D.

I remember a time when Pascal was very popular. Everyone recommended it as a language for beginners. There were similar arguments, similar comparisons, surveys, and of course flamewars.

Look where Pascal is now. It's gone. Almost completely irrelevant, despite the fact that there is now a free Object Pascal compiler available.

Ok let us follow your line of reasoning, according to you pascal never died actually , it became DELPHI and after that it became python(the syntax is very similar). Pascal is not dead , as DELPHI revived from its asses ( afte the product was sold together with Builder by Borland ) and became DELPHI .NET and still remains a better alternative to VB. NET .

Look how dead Pascal is.

http://sourceforge.net/projects/delphinet

http://en.wikipedia.org/wiki/Borland_Delphi

http://en.wikipedia.org/wiki/Lazarus_(software)

I am not even bother to say that Without DELPHI, Winforms in .NET , NETBEANS in JAVA and the whole full OO libraries idea (compared with the MFC C++ joke) which today is considered pretty standard stuff would never existed because all these ideas and many more were ripped from DELPHI (actually after the failure of DELPHI to establish itself as a commercial project , the ex-developers , went to work to .NET and JAVA).

That alone is a huge win for the "easy " languages. And a huge proof that innovation is more likely to happen with "easy" languages like python and pascal.

The .NET framework is a perfect example. There you have two languages that are functionally identical, one with a C-like syntax (C#), the other with a syntax targeted at beginners (Visual Basic). Both languages compile against the .NET runtime, both languages can do the same things. Guess which one of them is immensely more popular than the other? Yup, it's C#. The TIOBE index doesn't show this yet because it mixes VB.NET with VB6 which is unrelated to .NET. Once you remove VB6 from the picture, the trend is obvious.

Actually .NET is the worst you can use for enforcing your arguments. .NET is no secret that has been a huge failure for Visual Basic. First let define a huge failure. Well a huge failure is when you let down your own people. VISUAL BASIC has been the most popular language in the world , alot more than C++. Now as you correctly pointed , there are alot more C# developer than there are VB .NET.

This why

http://www.zdnetasia.com/news/software/0,39044164,21215619,00.htm

The problem with VISUAL BASIC .NET is that it may remain BASIC in syntax but its library complete transformed from old Simple easy to use Visual Basic 6 to the one full OO .NET shared library.

What the VISUAL BASIC developer said ? "Well if they are going to rape us with OO and all the stuff that I wanted avoid all along why not join C#? It is not going to be any more difficult! "

The problem is that they are , I know impossible to believe, alot of people (.....should I say a big majority ?..... cause VISUAL BASIC 6 used to be the biggest majority ...) who hate and do not need OO.

"Oups sorry you will have to endure OO like it or not". So those people moved to C# and quite possible to python .

Once again it proves my point , that the syntax of the language is only 10% of the whole package. The rest is the library, IDE, tools etc. It is something I learned in delphi, it is something I see now in python and JAVA.

It is not only the fact that those languages are easy to type as syntax (not JAVA of course) it is easy to use as libraries.

#66

This whole syntax issue is somewhat misguided as a point of debate as it's just a small part of the picture...

When it comes to C's syntax and its relationship to its later-day offspring, one has to realize that we're talking just simply a handful of control constructs, the exact syntactic forms of which are not that a big deal. You can do if-then-elses and loops and function definitions/calls in only so many ways, and C-style won over Pascal style for good reason -- minimalism is one reason why C is better.

Now, when it comes to Python's syntax in the same basic control constructs... Python is even more economical there. There really is very little to learn, so there is no point complaining that you "have to learn a different syntax", especially if we assume a beginner.

But, as I said, it really is not just a matter of syntax... Python's control constructs and other base language building blocks are not only very economical syntactically, they are also more general and powerful conceptually/semantically than C's simply because they operate on a higher abstraction level. The for construct is a good example, as it approaches things from the "iterate over something that is iterable" perspective... which gives a good reason to look at lists, which are first-class objects in the language. Lists, on the other hand, can be turned into other lists through list comprehensions, which are a functional mapping/filtering operation in one syntactic element -- and a very concise, logical one at that.

Soon we notice that the beginning programmer has not only learned basic program constructs, but been introduced even to the concept of a list, which previously was not understandable if it was not implemented using pointers! ;)

#67

eye208 said: But the fact is that languages with a syntax that deviates too far away from C always had a hard time gaining acceptance. That's just the way it is.

Show me a programmer who has hard time to learn syntax of any algol-like language, and I show you a programmer with lazy mind and lack of skills.

Syntax is skin deep. What is hard when switching language platforms is libraries and overall programming concepts. Ie for someone who hacked CGI apps in Perl or Python/Turbogears, switching to Java servlets using Struts is extremely frustrating, because the way you solve most trivial problems is completely different. Everything you learned in CGI world is useless, Java reinvented the whole thing in a completely different way, with different mental models and vocabulary.

#68

eye208 said: Sorry, but this is just nonsense. When C embraced change, the result was C++. When C++ embraced change, the results were Java, C#, and D. But the fact is that languages with a syntax that deviates too far away from C always had a hard time gaining acceptance. That's just the way it is.

That's because C-like syntax is symbolically very economical. I mean: a single "{" means the same as a colon + set of indentations in Python... So, less symbols to say the same. Great... but that means less intuition. It depends where you're targeting to decide what you want. Look at Perl: excessive symbolic economy (but also look at Lisp: almost no symbols...).

So, it's not a surprise that it's used as a preferred syntax type... but that doesn't mean the semantics are the same (and these are which matter).

#69

pmasiar said: Show me a programmer who has hard time to learn syntax of any algol-like language, and I show you a programmer with lazy mind and lack of skills.

Syntax is skin deep. What is hard when switching language platforms is libraries and overall programming concepts. Ie for someone who hacked CGI apps in Perl or Python/Turbogears, switching to Java servlets using Struts is extremely frustrating, because the way you solve most trivial problems is completely different. Everything you learned in CGI world is useless, Java reinvented the whole thing in a completely different way, with different mental models and vocabulary.

Exactly my point, the Library is a huge issue. I mean it took me only a few days to learn java syntax, but actually learning swing, streams, databases etc. etc. this takes years. And then of course there is the IDE. How could I resist the beauty of Eclipse, and so on ....

Deciding what language to use is HUGE .

And may I be sincere with you guys?

How much different is python from C++ syntax ?

You still have "if" "else" "for" "while" "OO" etc. , it is not as if it is very different as syntax to C++ , actually it is not the difference that makes it special , it is the fact that it is more compact. It took me one day to learn the syntax of pyhton.

So the whole argument " Ahh you learned Puthon ? Ah sorry you waste your time to learn Java, C++ or whatever syntax." Sorry but I do not buy it.

And I am not talking about python here only. Any language you learn will help to make a much easier transition to another language, what you learn as syntax goes on to the next language as well.

Even the libraries share a lot of similarities but of course much less than syntax. For example , I had events for GUI in Delphi , similar (do i dare say identical ? ) in .NET , similar in Java.

That does not mean that I disagree with Pmasiar. All I am saying is that some things remain the same.

Of course , in the end what really matters is WHAT YOU DO with the language. But you just cannot ignore all that time you will have to invest to learn the damn thing. This why I believe that choosing the right language from the start is a great deal.

#70

pmasiar said: Show me a programmer who has hard time to learn syntax of any algol-like language, and I show you a programmer with lazy mind and lack of skills.

Time is money. Tell me a reason why a C/C++/Java programmer like me should spend time learning Python. What do I *need* it for?

I think the answer is due because I told you many reasons why the others are worth learning.

#71

Recurring discussion. moving it to the correct place.

#72

eye208 said: Time is money. Tell me a reason why a C/C++/Java programmer like me should spend time learning Python. What do I *need* it for?

ahh, so you don't even know Python, that's why you are so sure Python is wrong way to solve problems! Now it is much more clear why all the disagreements. You are not familiar with any dynamically typed language?

Consider reading 'Beating the averages' linked before, about different languages, and if you fit definition of a blub programmer.

I found that most people who dislike Python are people who don't know Python, but are sure Python will not teach them anything, because all language are Turing-complete and all that crap.

Of course you don't need generator expressions, closures and list comprehension, because you don't think using those models. Strictly speaking it is not needed, because it's gets translated to ASM anyway - but we use higher languages with more flexible mental models to abstract away implemetation details not necessary and relevant to solve particular problem. 'Humble Programmer' explains it better, go and read it.

Exactly because time is money, you need dynamic languages. With dynamic languages you can solve same task 5 times faster (because runtime will handle for you many typing hurdles you have to handle yourself in language like C).

It is extremely frustrating to spend so much time arguing about something, and then learn that you did not read the links I posted you, and you are not familiar with the concept you criticize (dynamic typing).

#73

slavik said: Recurring discussion. moving it to the correct place.

all-powerful mod moved it away just when poster could be enlightened, when the reason why he was so confused was revealed, and all discussion would be over.

If that discussion was to be moved away, it shoud been done a day ago.

#74

Welcome, young thread. I've been expecting you... *evil cackle*

#75

pmasiar said: all-powerful mod moved it away just when poster could be enlightened, when the reason why he was so confused was revealed, and all discussion would be over.

If that discussion was to be moved away, it should been done a day ago.

The world is divided in two pieces, into the fighters and the pacifists. Unfortunately the fighters are the ones that have something to contribute, pacifists the only thing that they can contribute is class ,or maybe a "higher standard" but nothing else.

If you searching for me , I will be with the Trolls, they are far more useful .

#76

ok, should i mark this as solved???. the discussion moved somewhere else

#77

pmasiar said: ahh, so you don't even know Python, that's why you are so sure Python is wrong way to solve problems! Now it is much more clear why all the disagreements. You are not familiar with any dynamically typed language?

Consider reading 'Beating the averages' linked before, about different languages, and if you fit definition of a blub programmer.

I found that most people who dislike Python are people who don't know Python, but are sure Python will not teach them anything, because all language are Turing-complete and all that crap.

Of course you don't need generator expressions, closures and list comprehension, because you don't think using those models. Strictly speaking it is not needed, because it's gets translated to ASM anyway - but we use higher languages with more flexible mental models to abstract away implemetation details not necessary and relevant to solve particular problem. 'Humble Programmer' explains it better, go and read it.

Exactly because time is money, you need dynamic languages. With dynamic languages you can solve same task 5 times faster (because runtime will handle for you many typing hurdles you have to handle yourself in language like C).

(Java and Python are used here just as examples) The language I write mostly in is Java, it is what I do at work. Last week I started learning Python, from what I've seen so far I like it. But is there much point in studying it? The learning process is fun, I will learn new techniques, maybe I'll become a better programmer. I even think that Python may become my new favorite language. Yet, why should I invest my time in Python? If I invest this time in C# and .Net for example, this will open much more job possibilities, according to statistics. And this saddens me, because I would prefer python. (I'm feeling sleepy, so this post will be continued tomorrow.)

#78

:O thread from Programming section moved to Community Cafe... two different worlds.

#79

spupy said: (Java and Python are used here just as examples)

The language I write mostly in is Java, it is what I do at work. Last week I started learning Python, from what I've seen so far I like it. But is there much point in studying it? The learning process is fun, I will learn new techniques, maybe I'll become a better programmer. I even think that Python may become my new favorite language. Yet, why should I invest my time in Python? If I invest this time in C# and .Net for example, this will open much more job possibilities, according to statistics. And this saddens me, because I would prefer python. (I'm feeling sleepy, so this post will be continued tomorrow.)

Well if you want to take advantage of .NET or JAVA , you have Jython and ironpython. I use jython , it gives me 100% python syntax, 100% access to JAVA libraries and almost 100% access to the python standard library.

If you follow statistics , they why don't you head back to WINDOWS ? Statistics is for people following the crowd. Are you part of the crowd or do you decide for yourself. Try python , if it does not work for you then choose something else. It is as easy as that.

What the python syntax will give ? 2-10 times less code. That means that a project that takes a year in C++, C#, or JAVA , it will take 1-6 months to finish in python , jython, or ironpython. Is this a good enough reason ?

#80

spupy said:

But is there much point in studying it? The learning process is fun, I will learn new techniques, maybe I'll become a better programmer.

This sort of saddens me... why invest time in going to school if you can just grab a shovel and make a living shovelling things?

As a programmer one needs to improve one's thinking, and only after using languages like Lisp have I started seeing how much of a subset of everything that's out there object-oriented static-typed languages actually are... and interestingly, when I solve problems in those languages these days, my mental model usually first solves the problem in the highest possible abstraction level terms, and then just shoehorns that into the Java/C style of doing things...

#81

spupy said: Last week I started learning Python, from what I've seen so far I like it.

But is there much point in studying it? The learning process is fun, I will learn new techniques, maybe I'll become a better programmer. I even think that Python may become my new favorite language.

Becoming better programmer is reason good enough.

And maybe later, when yuo will be in position to influence language selection (ie when starting your own startup :-) ) you may decide for language which will make your team more productive - see 'Beating averages' linked before.

#82

laplace/d said: ok, should i mark this as solved???. the discussion moved somewhere else

I believe that the move was wrong. This was heated discussion but not a flamewar yet, and at least you clearly enjoyed the learning experience. :-)

I decided to dispute the move, asking for the thread to be moved back. That's why the "Resolution Center' is here for: mods have lots of powers, but their decisions can be challenged.

You can chime in about the issue if you want to:

http://ubuntuforums.org/showthread.php?p=6533759

#83

Thread closed for review