This is my first post on Daniweb so forgive me if I make any mistakes.

Introduction:

I recently graduated from Dev Bootcamp. It is an accelerated 9-12 week camp which teaches Ruby and Rails.

A traditional computer science degree will teach students algorithms, data structures etc before moving onto higher level languages. However, since the camp is so short they go on to teach Ruby and ROR directly.

At present, I have a fair bit of knowledge in Ruby, Rails, Javascript and JQuery and can write and deploy apps if I wanted to. But, I know I have only scratched the surface if I intend to become a good software developer.

Queries:

I have read a fair bit of questions of Daniweb and other websites and there seem to be 2 schools of thought:

The first is that learning a lower language like C is essential to become a good software developer and the second is that it is not and that it is irrelevant in today's world. Being an engineering graduate, I am inclined to agree with the former. However, that is not what the question is about and I do not intend to start a flame war.

In short, I am curious on how to proceed with my education:

Should I go ahead and learn about algorithms and data structures via an online course on Coursera or MIT Courseware or should I start off by learning the C programming language from scratch and then move on to algorithms and data structures? The reason I am leaning towards the latter is because many of the online algorithm courses require a basic understanding of C.

Another option would be to continue to build Rails apps and get better at it with practise completely ignoring the fundamental CS concepts.

Eventually, I would like to develop in higher level languages. If I decide to go forward with learning C, at what point should I stop and switch back to developing apps in higher level languages (Ruby with Rails)?

Format: I do not want this topic to be closed because this is a genuine concern and with the amount of information and various schools of thought available on the internet I seem to have reached a point of 'paralysis by analysis'. I know my queries are kind of open ended but please try and keep this thread clean.

A recommended format of a response would be:

I think you should do **** to move forward with your education because ****. Some recommended resources are ****.

If you decide to learn C, you should learn until ****.

Thanks a lot guys.

Daniweb has helped me a lot in the past and I hope the responses on this thread too can help other people in the same boat as me. I'm sure there are many.

Oh I know someone who took a Ruby-based dev bootcamp course like that a few years ago.

IMHO, it's great to learn a lower level language because it will help you with all of the algorithm design, data structures, etc. stuff that you missed out on with a traditional computer science degree. Understanding the building blocks that higher level code abstracts on top of can never be a bad thing.

That being said, I think that the language is simply a tool to learn the concepts. You don't need to concern yourself with syntax too much and all of the nuances of C/C++ ... it's all about the concepts and using the language as a tool.

Teach yourself the fundamentals of C and the basic syntax, and then delve right into data structures using C/C++ as a means to explore things such as time/space complexity, linked lists, etc. that you wouldn't really be able to explore with a higher level language that abstracts the fundamentals away.

Because of yoru background, it seems like you only have experience with Ruby. You'll be surprised how easy it is to migrate from one language to another. You'll also begin to appreciate how different languages have different strengths and weaknesses. You may find that the next project you want to tackle is best left up to .NET or Java or C++ or even PHP.

I don't think it's a matter of putting Ruby aside, switching to C for a specific length of time, and then switching back to Ruby. All of the fundamentals exist within all languages, and the time/energy/effort you put into learning the building blocks will always make you a better programmer with any language you decide to tackle.

Good luck.

Thanks a lot Dani!

That makes a lot of sense to me.

I am going to go forward with C++ then and learn some basics before delving into Data Structures and Algorithms.

Thanks again! It was the perfect answer :)

C is one of the most popular languages, and it also shares a "special closeness" with the computer. I would say it's worth learning it, even if you don't use it.

I would also recommend you check out Racket and htdp (MIT press). Racket is used to introduce programming in many large universities. One of the reasons is that it "forces you to program in a general purpose way." The book will introduce you to elementary data scructures and algorithms cleanly using recursion and functional programming. The idea isn't that implementing things using recursion is better, however it is more often then not beneficial approach problems in terms of recursion and functional programming even while implmenting them imperatively.

Also, here are some nice course notes for learning fundamental algorithms and datastructures with.

@Hiroshe
Thanks for the resources. I will definitely refer to them.

However, the problem with books is that there is a LOT of information in them and it will take me a really long time to go through even one of them.

Do you have any advice in this regard?

Basically it's like being an interior decorator and saying you want to understand the fundamentals of construction/architecture so that you can do a better job planning spaces.

Before you can get any hands on construction experience, you need to set aside a little bit of time and understand how to use a hammer and screwdriver so that you can explore the inner workings and know what you're looking at. The hammer and screwdriver are just a means to an end, so to speak.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.