High Level Explanation - high-level

I am doing a project for school and the question says
"Prepare a high-level explanation of the interface for the user. The user is the intended audience of this explanation, so the code is not relevant. "
How do I provide a high level explanation without using some kind of code?

I find that a lot of software is sorely missing "high level explanation". Modern programming languages tend to make the code fairly easy to understand at the microscopic level; and comments on methods and properties in interfaces can help the user with detail about how to use the interface. However, the user needs to first understand the overall domain concepts and design approach before the detailed documentation can be useful. Pulling those concepts out of detail comments and the code can be difficult. High-level explanation can help the user tremendously.

Related

What are basic concepts one should know about OAuth, SAML, Microservices?

What concepts about these topics a mid level java developer should know ?
That's a bit of a silly question and will most likely be closed as too broad. My general answer is: As much as possible, of course. You always want to know as much as possible about any topics that you would consider important for your profession. By the fact that you ask this question I assume that these topics may be important to your career.
The more specific answer is: It depends on where you want to be with your career and personal life. You should of course always learn all topics that would be required in your current job at some point. For deciding if you want to learn additional topics you should consider the following:
Will it help your career in the future?
Do you have a personal interest in learning it?
Are there other topics that would benefit me more?
Is it ok to spend time on it for my work / life balance?
Is it better to learn a technology or an application domain?
Is it fun for me?
...
Also note that in general as a software engineer you won't be able to learn every technology available and you will always have to choose what to learn broadly and what to specialize in. These choices are very important and will define what your earnings potential and future career options are.

Differences between (R)Unified Process And Extreme Programming

I've searched for at question like this and i dont think there are one.
As the title says... I know there are huge differences between how to do things in (R)UP and in XP as a way of developing systems, but what are the really?
I'm trying to write a nice explanation that i can give to other people so they hopefully easy can understand the differences.
I want to compare the following subjects:
Design
Documentation
Prototyping
User involvement
Usability
Technical quality
Test
I'm not trying to start a discussion, just want to know if you know any good sites that could have the information i'm looking for or if you have a answer for one of the subjects. I have allready written some of it myself but due to the fact that i dont want it to be a subjective comparison, i then ask you.
You might find this useful
XP vs RUP (pdf)
RUP and XP are not mutually exclusive. Comparing the two is like comparing apples and oranges -- you can enjoy both. Many companies following RUP choose to include some or all of XP practices.
For the basics, the wikipedia articles are a good start:
http://en.wikipedia.org/wiki/IBM_Rational_Unified_Process
http://en.wikipedia.org/wiki/Extreme_programming_practices

Is medical imaging a separate programming specialty?

Sorry if it's yet another question with no response:), feel free to close. There's a bunch of questions on SO like: does technology/language/database used in medicine is quite different from that used in traditional area like banking/industry etc. You can hear in response or 1) no difference 2) it's vague and hard according to lack of standards.
But medical imaging is attractive not only due to general concerns: humanistic & scientific. Job opportunities are strict and obvious. C++/Сom/ActiveX/C#, some open source libraries, DICOM/HL7, Python. It looks like a separate specialty - you don't need to explain on interview what exactly you did.
So my question is: Is medical imaging a separate specialty as it seems to stranger? Do the vendors mostly go in the same direction and you can change them without changing world view as it happens in enterprise? Or it is just kind of C++ programming which is usually interchanged with some other image processing, trading, drivers, op. system programming etc.?
I would say that programming is universal. Whether you're developing a web application or designing for an embedded system, you will face similar challenges. However, some aspects do change. And in this case, I would say that the focus on algorithms is what sets medical imaging apart from other fields.
I'm not an expert, but there is definitely some advanced math and algorithms involved in medical imaging. For example, consider image registration - a common algorithm used in the field. Not only would an MI expert have to have a good mathematical understanding of the registration, but he would also have to be able to readily implement and optimize it - not a trivial task.

What are the essential concepts all programmers should learn and use? [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I'm currently learning to program, and I didn't take CS classes so I'm basically starting out on the bottom. I have been putting together code on and off for many years, but haven't really had a good understanding of essential concepts needed for enganging in bigger projects. Object-orientation is an obvious one, and I feel I'm beginning to understand some of the concepts there. Then there is a lot of buzz and methodology, such as MVC, UML, SCRUM, SOLID and so foth and so on.. I've looked at many of these but I'm always stumped as most explanations seem to require some understanding of other concepts.
I want to learn this stuff the "right" way, so where do I begin?
What are the overarching constructs I need to understand that enable me to understand all the underpinnings of software architecture/design/development?
What am I missing?
Are there constructs and concepts that can and should wait until I've cleared the foundation?
The SOLID principles are probably the most important.
From those you understand the motivation behind using a pattern such as MVC, why people think of persistence ignorance as important and so on. They are at the core of the majority of good practices.
Loose coupling, high cohesion.
And as for books, Code Complete covers almost everything at some level, at least.
Software development is a HUGE arena and you should be careful that you don't take on too much too quickly. Unless you're going to go in the direction of functional programming I'd suggest you start off by making sure you fully understand the concepts surrounding OO design and programming as this should be your foundation.
Once you understand that well you'll be able to understand design patterns a lot better and get a feeling for when to use them.
I'd suggest you try out a few languages till you find one you feel comfortable with, personally my favourite language is Ada which is a very pure OO language but in the business world I work in C# which still has a lot of issues but these are outweighed by the more vibrant job market.
I wouldn't worry too much about Scrum at this stage as you need to focus more on your dev skills before worrying about project management.
The most important thing is to work with as much code as possible, download lots of good reference solutions and work through the code till you understand it, and try and keep an eye on the development trends.
If its viable you may also want to considering attending some developer conferences too as these can be very inspirational.
Stay away from ACRONYMS (including those you've listed) and Methodologies(tm). At least in the beginning.
Read good books. Start with this one: Pragmatic Programmer. Learn algorithms and data structures, possibly from Introduction to algorithms by Cormen et al.
Write a lot of code. Practice is more important than anything else.
How to test software with unit tests. Being able to do that will solve 90% of all the other issue automatically since you can't test while they are around.
When you know how to test, you can start on advanced topics like design.
I'd recommend "Object Oriented Analysis and Design with Applications" by Grady Booch et al. The latest editoin has detailed explanation of concepts of OOAD including MVC, UML (which he invented), and discussions on how to manage the whole process of software development. The second part of the book exemplifies all this by developing 5 sample systems (with sometimes orthogonal aspects from the very core).
Another good one is of course Design Patterns by GoF which will give you an idea of loose coupling, ways to efficient encapsulation and reuse of code, etc
For what concerns the algorithmic part, take any book which is not bounded to a particular programming language. My favorite is Introduction to Algorithms by T. H. Cormen et al, it gets a bit theoretical at some points, but I especially like it when they are proving certain things and not just asking you to believe it.
When you are working with any modern general purpose language, it is probably a good idea to get a handle on patterns (MVC or Model-View-Controller is one). The book by the "gang of four" is a must read for this, or at least research a few and use it as a reference.
clicky
Refactoring is another concept that should be in your arsenal. The book by Martin Fowler on this subject is a very nice read and helps understand the aforementioned patterns better also a little explanation about UML is included.
Can't post more than one hyperlink so...
search on amazon for: Refactoring, Improving the design of existing code
When you want to communicate your designs UML (Unified Modelling Language) is the 'tool' of choice for many people. However UML is large and unwieldy but Martin Fowler (again) has managed to boil it down to the essentials.
search on amazon for: UML Distilled (make sure you get the most recent one)
SCRUM is one of many methods that is used to manage software development groups, I do not think there is much merit in learning that when you are just starting out or on your own. Especially not in detail.
Hope it helps...
PS: SOLID I haven't heard about yet, somebody else has to help you there.
You'd have a decent foundation if you surveyed basic Data Structures, Algorithms, and Algorithms Analysis.
I think that you should start coding real world problems to get a feel for problems in the programming domain.
Then you have a better background to understand why objects are important. Then, after managing objects, you will learn why patterns and OO principles are important.
Personally, I highly recommend the Agile Software Development, by Robert C Martin.
But it may be a long and tiresome read unless you have a feel for the problems being solved. I'm afraid that you may need 500-1000 hours of coding at the minimum before you get an appreciation that the problems being solved are real.
And it probably takes 7000+ hours before you develop an instinctive heart-felt pain from merely reading the problems, making this sort of book become the page-turner that it should be.
Regrettably, many of the sound practices that you should develop are only appreciated after having to live with your code over time. If you just do many excercises and abandon the code afterwards just "because it works", then you are missing out on the greatest pain of all. It is a luxury our industry does not have, and "technical debt" is a very very real and costly to those with large code bases.
I feel kinda silly answering my own question like this.. :) But one valuable resource I've found for learning to write code, is the Euler Project at http://www.projecteuler.net
It's basically a collection of mathmatical problems that you solve by writing your own solution to it. Once you've found the answer to a particular problem, you're allowed access to that problem's forum where different solutions are discussed. I was amazed at how much I was learning in a) solving a challenge, b) reading about other peoples approaches and c) how many programming languages there are out there! :)
The problems start out easy (you can tell by the number of people who's solved them) and progress to harder and harder problems.
Currently I'm working on problem #3, having solved the previous two... I recommend you start chippin' away at them, no matter your level!

Long-term memorization techniques to become an expert in the field?

I'm familiar with some mnemonic/memorization techniques for about a year.
I think that this techniques can give a developer significant benefit or even make you an expert in the field.
If you are familiar with this techniques, you know that there are mnemonic techniques for long-term memorizing. We often read lots of books, and there are many concepts which you don't remember because they won't appear often in your daily coding-life. So, you need to learn it again and again, months and years later.
The same situation with frameworks. It takes some time to become familiar with framework's syntax, useful code constructs and so on. But after some time you forget many concepts from your previous framework(or framework which you rarely use - but it is very important to you).
By using this techniques you can build with time your sustainable knowledge base, which will reliably grow - you can be confident that after some time you won't forget about the concepts you learned earlier.
Please tell me what do you think about this idea?
You are already familiar with Mnemonics techniques, please tell about your experience - it will be very useful and interesting to hear.
Useful links:
Method of loci
Mnemonic
My favorite method:
Type it into Google
I'm being totally serious - why do you need to remember it?
You don't memorize how to be a good programmer any more than you memorize how to be a good classical violinist. You practice, practice, practice. That will let you naturally recall the most important constructs, and as Chad says, Google is there for the less important ones. I have never felt the need to use mnemonic devices or rote memorization to learn a programming construct or technique.
"Expertise in the field" isn't about memorizing function calls. It's about the ability to break problems down, and provide performant, maintainable, reliable solutions in minimal time.
You could memorize every function call in the STL, and still be a complete neophyte programmer.
I read Harry Lorrayne's "The Memory Book" a few years ago, and found that the techniques therein were great for remembering related facts. However, in my experience I the techniques could have been more useful, namely:
The memorization didn't tend to work in the long run. If I wasn't practicing remembering a particular list, or body of facts, I would eventually completely forget them within a few days or weeks.
I had trouble applying the techniques to hierarchical data sets, like class libraries. This made their use less powerful for programming stuff.
The techniques were very useful for things that could be easily explained by voice, or a single stream of text. However, I had trouble applying them to things of a more visual nature, such as mathematical equations.
That said, I have used Mnumonic Techniques while coding for things that google could not replace. I sometimes use the number memorization trick to recall a specific line of code (by its line number) while I jump around a code file, or remember function names as I jump between files.
Agree with other answers, some of the more useful things you could focus on improving are:
Troubleshoot a problem, using the 'elimination' technique, basically eliminating problem areas, one by one, until you hit the right one
Quickly get to the resource/API/Information I need - Use Google, SO, CodePlex, Google code, Koders.com codesearch, Google codesearch, MSDN etc - Knowing what information lies where is enough to save time drastically
Avoid thrashing (stuck with a problem for too long, no results), once you've spent enough time on the problem, by giving others 'complete' and 'relevant' information on your problem you can help others help you
Finally, memorizing about theories in programming is not helpful, however just reading, listening to experts and podcasts, attending conferences can help great deal in 'access to information from memory'
HTH

Resources