Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 9 years ago.
Improve this question
What is the best way to learn about programming design? I see lots of tutorials for programming languages, but a lot of them focus on specific language syntax. I want to really get into the aspects of design, using programs efficiently, etc. Where should I start?
Read a book on algorithms.
Learn OOP and read a book on Design Patterns
Realize that making code readable is often more important than making it as efficient as possible, and most optimization should be left up to your compiler.
If by programming design you mean design patterns, there are two books which are "classic" books for Design Patterns:
- Patterns of Enterprise Application Architecture, written by Martin Fowler;
- Design Patterns: Elements of Reusable Object-Oriented Software, written by Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides (they're refered as GANG OF FOUR, or GoF).
To show their theories in practice, they usually pick a language whose object-orientation support is good to show their examples.
Martin Fowler uses Java and the Gang Of Four use Smalltalk and C++ but if you have any previous programming experience (which I believe you do), you can understand most of it.
Best of luck
Related
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 2 years ago.
Improve this question
I'm a computer engineering student but i've never programmed in my life (i've only studied physics, chemistry, control systems etc). Since I know a lot more about math than programming languages, and I'm studying logic right now on my own (i read it can be useful for artificial intelligence), i was thinking about learning Prolog as a first programming language. I tried to find some information about it on the internet but i couldn't really find much, all i discovered is that it's not really useful for landing a job but it can give you a different "mindset". Do you think it would be worth to learn it, or it would just be better learning something like C, Python etc?
Thank you!
Prolog is indeed a wonderful language, and it makes you think is a very differnt mode from other languages. As for making it a first, I think that's a bold move, and I suspect it'll make learning more languages a bit of a challenge. If your intent is to learn sofware engineering, I'm very sure you'll eventually learn another one.
I'd start with Python but, since you're curious already, learn it on the side.
Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed last month.
Improve this question
So I wanted to learn HPC and I couldn't find any resources list.
Of course we have "Awesome HPC" but last update was for 3 years ago.
My main question is how to learn HPC.
what are the prerequisites?
what programming languages should I know?
And if you have any advice I'm all ears.
There are plenty of books about Parallel Computing, Parallel Algorithms, Scientific Computing, OpenMP and MPI; without to mention HPC books.
Some good books are even free and good to start with such as the Victor Eijkhout's HPC book.
With respect to programing languages, C, C++ and FORTRAN are generally used to code HPC applications. CUDA and OpenCL may be good to know for GPU-based programming.
Note that the HPC landscape should not be very different since 3 years, so it is OK to read such tutorials.
I would say it is very much about understanding the principles of computer architecture and from there on you will be able to write efficient code.
First, one has to be able to write good serial code and then you can have a look on parallelizing it.
I'm a big fan of the book "Introduction to High Performance Computing for Scientists and Engineers" from Hager and Wellein. It will give you the full journey from understanding the hardware to writing fast code and finally to make the fast code even faster by parallelizing. By the way, it's from 2010, but all in there still holds ;-)
Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 6 years ago.
Improve this question
Question:
How do Hardware languages (HDLs) differ from general purpose languages such as Python, Java, etc. In particular, what is the primary trade-off that causes general purpose languages to be sub-optimal for FPGA's when compared to VHDL and Verilog?
Context:
I'm a programmer but definitely work at a high level of abstraction such as JavaScript, tinkering with API's, etc. My low-level knowledge is very limited but I am playing around with an FPGA and have some novice questions that I cannot solve with Google or Wikis.
Considering I am a novice, please do not vote harshly against this post. Just state your suggestions for the question and I will happily revise! :)
Example:
For example, why isn't everyone just coding FPGAs and ASICs with Python or C# instead of Verilog or VHDL? I understand that there are some Python libraries, but I have read that they are limited in their viable use-cases. I would greatly appreciate someone shining some light on why HDLs are necessary and beneficial and why general purpose languages are not optimal in comparison for these scenarios.
Thanks in advance!
This is a broad opinionated question, but I think there is a short answer. In some sense, they are all programming languages, i.e text descriptions that gets compiled into a set of machine instructions to be executed on a host machine(software).
But an HDL is also a text description that gets compiled into a set of machine instructions to build another machine (hardware).
Technically, any programming language could be used to describe hardware (SystemC in C++ as an example), Verilog and VHDL were specifically developed to model and simulate hardware most efficiently.
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 8 years ago.
Improve this question
I love functional programming and I love Ruby as well. If I can code an algorithm in a functional style rather than in a imperative style, I do it. I tend to do not update or reuse variables as much as possible, avoid using "bang!" methods and use "map", "reduce", and similar functions instead of "each" or danger loops, etc. Basically I try to follow the rules of this article.
The problem is that usually the functional solution is much slower that the imperative one. In this article there are clear and scary examples about that, being until 15-20 times slower in some cases. After reading it and doing some benchmarks I am afraid of keep using the functional style, at least in Ruby.
By the other hand I feel more comfortable writing code in functional style because it is smart and clean, it tends to less bugs, and I think is more "correct", specially nowadays that we can use concurrency and parallelism for better performance.
So I am very confused about which style to use in Ruby. Any wise recommendation will be appreciated.
Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 10 years ago.
Improve this question
I am interesting in creating a better User Experience (UX). There are a lot of books out there, what are some that would be useful to a software engineer?
My favorites:
User Interface Design for Programmers by Joel Spolsky. A good first book for programmers. Phrases that will stick in your mind and affect your design, like "People can't control the mouse."
About Face: The Essentials of Interaction Design by Alan Cooper et al. Desktop-centric. Excellent.
Don't Make Me Think by Steve Krug. Web-centric. Short, easy read, good ideas, some remarks on usability testing.
Designing Interfaces: Patterns for Effective Interaction Design by Jennifer Tidwell
The Elements of Friendly Software Design by Paul Heckel (out of print, pre-GUI, still some good principles, like "Avoid frustrating the user")
Designing Visual Interfaces: Communication Oriented Techniques by Kevin Mullet and Darell Sano. Out-of-print, and out-of-date graphics, but still excellent. Good chapter on icons.
The Essential Guide to User Interface Design: An Introduction to GUI Design Principles and Techniques by Wilbert Galitz. Focuses on usage of low-level controls. Good chapter on communicating with the user.
At some point in your career, you may enjoy this wonderful book that draws parallels across multiple fields of design. (For example, the "confirmation" technique occurs both in software design and nuclear launch control.)
Universal Principles of Design by William Lidwell
it's specific to Web UX, but Steve Krug's Don't Make me Think is really interesting (and short, which always helps!). And to be fair, some of it translates to non-web apps too.
As well as giving you advice on the design of the UX, it talks about usability testing, which is something I think a lot more apps should do. (Websites too, but most of them do it already).
The Design of Everyday Things by Don Norman.
I would also recommend The Humane Interface: New Directions for Designing Interactive Systems by Jef Raskin. Has some really inspiring ideas.
Look up "The Design of Every day things", by Donald Norman. It was mandatory reading for the UI courses when I was in university.