Starting up with software engineering - programming-languages

I am new into the field of software engineering and wanted to learn different programming languages but I dont from where to start. Kindly give me some suggestion of programming languages that I can learn and get job companies like google.

some steps :
don’t skip the fundamentals :
take time in one programming language + solving problems (optimize
your algorithm)
deal with the new information as effective as possible
stay motivated
explain in your own words what you’ve just learned.
Never compare yourself to other developers
try to find a good mentor (book , videos , … trainer)

Related

Are there any good movies/documentaries on programming Applications?

I am not looking for any inspirational stuff. I am looking for movies which directly speak about the architecture of programming languages, the changes in the architecture which have taken place over the years. Also, I am looking for movies which portray the approach to programming when creating applications for different platforms on web, mobile or desktop.
then you are not looking for a documentary you should be looking for video lectures for eg
For algorithm and programming techniques : http://www.youtube.com/user/BucklandRichard
Programming Paradigms lectures by Professor Jerry Cain in Stanford
But only thing you need to be good at programming is to code try to solve problems
for starters you could try http://www.pythonchallenge.com/
then move on to http://projecteuler.net/problems
to develop your interests in programming .
Best of luck

Are new paradigms of programming always driven by a need?

I'm something of a programming language junkie, and examples abound...
Lisp was originally created as a practical mathematical notation for computer programs
Simula was designed for doing simulations, and gave us objects and classes
C was designed for implementing system software (specifically, the Unix operating system)
Erlang was designed with the aim of improving the development of telephony applications at Ericsson.
Languages like Perl and Ruby also, but these four gave birth to fundamental styles of computer programming, as opposed to "just" implementing an existing methodology or style of solving specific software engineering problems.
Is every new programming paradigm primarily driven by a need to solve a practical problem? Does every new programming language come about from a programmer scratching an itch?
As I plan to dedicate my life to research in new programming languages for AI, I'm wondering whether I should pursue the theory of programming intelligence directly, or attempt to solve practical problems in AI and then "discover" the paradigms to solve them.
No, most are. But you're forgetting Esoteric programming languages.
Example: http://www.dangermouse.net/esoteric/piet.html
A language that uses JPG's as code.
I think that every language is designed according to some need. That need of course can just be the language designers own desire for a more elegant language, a language he himself feels more comfortable programming in.
However, the language that are successful will very likely provide some solutions to a more general need. This need my not necesarely be evident at the time the language is designed, but for it to get recognition I think it has to be a need that is shared and gets shelved out as a general desire at some point.
There are probably a lot of languages out there that did not necessarely address a problem that is shared by many others or maybe even adresses needs that have not been wiledly realized as such.
To you concrete question: I think the best way to discover the shortcomings of current languages is to use them. Of course, the theory may help you to come up with appropriate solutions. So I'd say the best way is (as always) to have theoretical knowledge and practical experience.
You'd think nobody would invest time in inventing, refining, implementing, using and spreading a new way of doing things if "the old ways" worked just fine. And the real world, as in your examples, confirms this theory. All this still applies if we broaden the scope beyond programming paradigms. So I'd say it is safe to assume inventions are (partly) driven by a need for the thing invented.
*hits his smartass alter ego with a bat and takes over the talk*
As for the question in the last paragraph: If anyone knows whether you'll have more fun pursuing theory or solving real problems, it's you. I would choose practice any time of the day - but I'm not you. But from looking at (programming language) history I can tell that all no great (i.e. can be used to get things done) language came from theory. It is logical to assume one can't find a good tool for an application without knowing that application throughoutly from daily work.

How to be prepared for industry? [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
This question does not appear to be about programming within the scope defined in the help center.
Closed 7 years ago.
Improve this question
The amount of available programming languages is both a bless and a curse, I think.
I know a lot of programming languages already, some at syntax-level only and some good enough to do actual coding (Python, C, C++, Haskell, Perl, BASH, PHP, and lots of others). I have been programming for almost as long as I've been intensivly using computers (6 years), in almost every paradigm (functional, imperative, object oriented), but I don't feel prepared for the software industry.
I've been writing a lot of bigger programs in a lot of different languages, mostly network based, including large multithreaded server/clients, and I still don't feel prepared!
Currently I'm obsessed with my "3-tier" plan, which includes a high level language like Haskell, an interpreted language like Python and a low level language like C, yet I don't feel good enough!
I know how to work in teams, and how to work along given guidelines, but I'm unsure.
Am I prepared?
Please, kind people of stackoverflow, help me out of this mess! :(
Thanks for all the answers, I wish I could chose more answers as THE answer :)
Sounds like you know an awful lot about programming, but you don't mention anything else. Being a software developer requires more than just programming as a technical skill. Brush up on topics such as source code control, unit testing/test-driven development, continuous integration, etc. Hopefully you'll land in a job where at least one of those is in use. Try and learn as many useful time-savers as you can with your tools; try to become as flexible and efficient with your IDE as possible.
Elsewhere, don't forget to develop the more personal skills; attitude and work ethic, and more related to your field, issues such as eliciting requirements, documenting issues and describing problems and solutions. Don't worry too much about these if you're going in afresh, because you're not expected to have a huge knowledge of them, but if you're at least aware of them and trying to improve, then you have a greater chance of doing so.
Try to appraise yourself of general software development issues that aren't directly coding, if you haven't already - general attitudes to security-oriented development (and testing), good design and similar best practices.
Don't sweat too much about being perfect right off the bat. If you've got no room for improvement, you aren't going to enjoy your career very long, and burning out as a programmer ain't much fun.
You know enough - there is a minimum threshold of knowledge required in the industry (which is above what some developers have), but it sounds like you are already there.
For anyone with the aptitude, new programming languages, techniques, etc, are easy to learn. A good company to work for will hire you based on your abilities, not knowledge (which can go stale very quickly).
If you want to stand out as a software developer, ensure you have rock solid communication skills for reports, e-mail, telephone, meetings, etc. That is a rarer gift in the software field, and although it is not necessary more valuable at the junior levels, it pays off in the long run.
The single most important thing I can think of to be successful in the industry is to be able to respond quickly and efficiently to change.
I recently took a programming test which I thought was a good and fair test. I passed it without a great deal of effort. I was told that 50% of the people (these are all people with programmer on the resume) don't even know where to start. Your earnestness and desire will most likely put you in the top third of most places to start with.
Knowning languages is not all you can do.
If you can, a placement/internship will do wonders. Anyone can program. Real world experience will teach you more than any tutorials, self learning or schooling will.
Naturally, gaining an internship requires some experience, so it's very much catch twenty two.
If going for an internship is not possible, get involved with an open source project. You'll find you'll learn loads by working with people smarter than you.
True knowledge exists in knowing that you know nothing.
Socrates some smart dude
I think this is pretty common among developers. Imo it´s a way better sign then if you would come to the conclusion that you were fully trained.
The only way to know for sure if you're prepared is to try. Sometimes being thrown in the deep end actually helps and you'll find you learn more in that first real world job than you did in all the books/etc that you read in the years before. Also, knowing multiple languages helps you understand underlying semantics of programming in general, but in a real job you'll likely be sticking to one or two languages day to day, so don't get hung up on knowing every language out there.
It's better to try & fail than to spend your life wondering if you're ready.
Go to dice or monster or whatever your favorite job site is and see what people are looking for. It's not Haskell, it's C++. Learn that well and you're ready to go. Once you're out in the real world, you'll learn quickly enough the things that are important. These are mostly the soft skills that school doesn't teach you. Things like how to get along with the clueless, how to present your ideas so they'll actually be considered, and how to see the forest even though you're stuck under a rock.

How does extending a programming language work?

I have no programming experience but am interested in learning a language.
So reading this section "http://wiki.freaks-unidos.net/weblogs/azul/principles-of-software#extend-your-language-to-match-your-domain" made me curious about programming a single application in 2 or more languages.
How is it actually done?
A few thoughts:
The page you linked to explains pretty clearly how it's done
If you are interested in learning a language, this is probably not the place to start
Programing a single application in two or more languages is only marginally related to the linked document.
Still, in the face of all that, I'll try to give an example of how this works by analogy.
Suppose you need to work with a group of people on some technical task--ranking chess puzzles by difficulty or testing marshmallows for contamination or something. Suppose further that one of the people on your team speaks only Japanese, another only Portuguese, and the third only Esperanto.
Being blessed with the ability to speak all of these languages fluently, your best bet is to make up an artificial language specialized to the task at hand; this is called a Domain Specific Language, or DSL. It should have all the terminology you need to talk about knights and rooks or silicate nanoparticles or whatever for the task, and not much else. Teach this to each of your team members, and then you can give them all their instructions at the same time. They can talk to each other about what they are doing, ask for help (so long as it's related to something covered by your language) as if they all spoke the same language.
That's roughly what he's talking about.
I think you may be trying to run before you can walk. The concepts in there probably require a little programming experience to start with.
The thrust of the article (and frankly poorly expressed) is that when you are programming you often encounter tasks that benefit from a declarative syntax, i.e. you should be able to express the intent of what you want to do and leave the implementation details to a library. A good example is querying a database, it's much more readable (usually) to be able to declaratively describe what you want to do and let some middleware figure out the best way to do it, SQL and Linq are 2 examples of a declarative mechanism for querying data.
This is a very interesting topic, but honestly if you have no programming experience it's probably more of a 201 subject than a 101 subject, get your basics down first.

Economics of software development [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 7 years ago.
Improve this question
Can anyone point me towards any references that attempt to formulate an economics of software development? In my own research, I discovered a book by Barry Boehm on this, but it seems very awkward and theoretical.
Dependency Structure Matrices seem to offer something worthwhile. Carliss Baldwin has used these in some work on modularization, boundaries, and transaction costs. A lot of it comes off as just common sense, though.
Also, economists have developed something called Behavioral Economics. Is there a "Behavioral Software Engineering" that addresses cognitive biases in developers or groups of developers?
Here's an interesting looking reference:
http://www.amazon.com/Knowledge-Sharing-Software-Development-Comparing/dp/3639100840/ref=sr_1_1?ie=UTF8&s=books&qid=1232979573&sr=1-1
Before Hal Varian became the Chief Economist at Google, he had worked on the economics of information technology at Berkeley, although he did not focus on software development per se. Nevertheless I would recommend a look at his paper on the more general topic from 2001. You can find a more complete list of his research work on his website. Hope that helps.
Software as Capital wasn't a waste of time, though you won't find any math in it and it reads like a PhD thesis because it started as one.
Another review.
I think that what you're looking for might fall under a sociology of software development... sociologists study all modern subjects, and from there you will no doubt find references to an economics of software development if there is one.
Facts and Fallacies of Software Engineering by Robert Glass has some dollar amounts associated with some activities (or, at least, percentage of total budget). Don't know if that helps at all, but it's something.
Several years ago I taught an "Economics of E-Commerce" course using Varian's book INFORMATION RULES. His idea of lock-in, though, leads the reader almost towards a drug-addict model of purchaser behaviour and exploitation. This book is more of an economics of e-business than an analysis of the software development process.
In terms of actually making software, there are ideas in the Mythical Man Month well worth knowing about.
The "Applied Information Economics" approach of Douglas Hubbard could be part of what you're looking for. If we assume software development is (often|always|sometimes|???) about supporting decision making by providing (better|more accurate|more up to date|whatever) information, then AIE helps as it's a technique for quantifying the value of better information. Read Hubbard's book How to Measure Anything for a good overview of the idea.
Also, the book Software By Numbers by Mark Denne and Jane Cleland-Huang provides a model for managing software projects by using something they call the "Incremental Funding Methodology". IFM is based on decomposing software projects into features based on the business value created, rather than decomposing them along technical boundaries. They then use a series of calculations based on Discounted Cash Flow (DCF), Net Present Value (NPV), Internal Rate of Return (IRR), etc. to show when in the project lifecycle the project will reach self-funding status, when it will reach "breakeven" and when it will generate a real positive cash return for the organization.
You might also find the Capability Cases book of interest. It doesn't strictly deal with any economic issues in detail, but it's an approach to software specification which attempts to more clearly map software capabilities to business strategy and business issues.

Resources