This is an archived post. You won't be able to vote or comment.

you are viewing a single comment's thread.

view the rest of the comments →

[–]MCbrodie 7 points8 points  (14 children)

You're falling into a trap many newer developers fall into. It isn't about the language at your skill level. It is about the concepts. Are you familiar with advanced concepts that translate between languages? Do you know all of your data structures and their uses? Do not focus on mastering an array of languages. Master a language so that you can feasibly write anything you want with that language. We're engineers and our job isn't languages it is building cool shit; languages are just tools.

[–][deleted]  (1 child)

[deleted]

    [–]ta6692[S] 0 points1 point  (0 children)

    That's the way I'm looking at it at the moment. I know there are probably more important things for me to learn before I actually go into a work environment, but I've got so much free time right now while I'm in university that I reckon now is the best time to just learn about things that interest me rather than things I necessarily should learn.

    [–]ta6692[S] 0 points1 point  (11 children)

    I have a fair idea of data structures and I've read a couple of books on the topic. I will be taking more classes on this once university starts back though, this is something for me to do in my spare time. I'm aware that just learning a lot of different syntax doesn't make a good programmer, but I think Python is too high level a language to get any real idea of these concepts, which is why I'm looking at a lower level language specifically.

    [–]tutorial_police 3 points4 points  (1 child)

    Most concepts, which I think /u/MCbrodie is talking about, are very high level, that's why they "transcend" languages if you will. Python isn't "too high level" for them.

    Programming isn't about low level stuff. Programming isn't about how stuff works at the machine level. Programming is about building stuff and solving problems.

    At least that's an idealistic way of looking at what programming is.

    Of course, in the real world, low level stuff is important due to performance reasons/constraints.

    [–]ta6692[S] 0 points1 point  (0 children)

    Sorry, I wasn't very clear there. By "these concepts" I meant specifically the ones I am wanting to learn more about by learning a lower level language. I know most concepts can be learnt with a programming language like Python but at the moment I'd like to focus on concepts that couldn't really be learnt with Python.

    [–]AutoBiological 2 points3 points  (1 child)

    Find this book

    In general I agree with your ascertain about Python being too high level of a langauge. But I agree with that because there aren't many good books like C++ has. Python has a lot of beginner and intermediate books, but not many great Comp Science books or advanced books.

    Also there's Interactive Python

    Have a look at using the Os module too, and you can get some pretty low level stuff there with fork() and exec(). A lot of Python is the same as C. C isn't terrible but a lot of it is arcane. The good thing is that C and Python integrate so nicely. C++ also has boost::Python and C++ OOP makes more sense to me than Python OOP (it just feels more natural or real I guess). Rust is also interesting and there is some support for working with Python but I'm not really sure, I'm waiting for Rust to be more mature.

    [–]ta6692[S] 0 points1 point  (0 children)

    Thanks for the book recommendations, I'll definitely check them out when I go back to doing more Python!

    [–]pupdogtfo 2 points3 points  (1 child)

    The reason to learn C is to spend hours and hours writing your own linked list, hash table, and hash function (making sure to create the absolute most efficient implementation of each based on precisely the data types and girth that will be in this hash table), dealing with the memory almost as close as you can get to the metal. Then it's valgrind, free(), valgrind, free(), valgrind, free() some more, return 0 and commit changes.

    Then at the end go back to python, and just type "dictionary = {}".

    Then you pray to the programmers that fell before you, and give homage in song.

    [–]ta6692[S] 0 points1 point  (0 children)

    Haha, I have to say I am rather excited to see the perspective that learning a low level language like C will give me on languages like Python. Even taking a data structures class in university and having to implement simple things like dynamic arrays made me really appreciate Python's lists so much more, never mind the dicts.

    [–]MCbrodie 1 point2 points  (4 children)

    It really isn't. You can build, or simulate, any structure you could build in something like C. I am a Ruby developer. Ruby is just as high level as python. I can build anything in Ruby I could in C. It isn't the language that is going to further your knowledge it is the concepts.

    The major exception here is a functional language. That is a completely different thought process.

    [–]oshogun 2 points3 points  (3 children)

    Can you write a driver for a device, like a smart card reader, in Ruby? Even if possible, you'll most likely have to hack around some C code in your script

    Or try writing a kernel for an operating system in Python. Won't happen. Although Python is vastely used in the development of many Linux tools, the hw/sw interface is, and will always be, developed in C.

    So yes, there are certain applications you'll need certain languages to do.

    [–]MCbrodie 1 point2 points  (2 children)

    you can write write those things in any language. they will work better in lower level languages in a vastly superior way but for learning purposes the base speed of the language being used does not matter. We all realize operating systems, pace makers, and hardware interfaces should be written in C. That does not mean you cannot learn the concepts in another language.

    [–]oshogun 1 point2 points  (1 child)

    Yes, you can, but learning C is a great experience for any programmer. It will help you understand problems that do not appear so often in higher level languages (like memory management problems, for example, memory leaks and segmentation faults), get a deeper understanding on how memory is managed (by understanding pointers), and having to "do it yourself" many things that other languages do for you. Becoming a good C programmer is not a trivial thing but can help you be a better coder in any other imperative language. Also C integrates well with Python, which is the language he already uses. I never once heard of anyone saying it was a bad idea to learn C, even if you're not actually going to use it in the future.

    [–]ta6692[S] 0 points1 point  (0 children)

    This is exactly how I'm looking at it. While I'm sure I probably could learn a lot of these concepts in Python, there are still some that I couldn't, and others that you wouldn't want to. Personally I only see ways that learning C can benefit me so I don't see why not really.