Upload
others
View
11
Download
0
Embed Size (px)
Citation preview
Ding Yuan
Demystifying software
What is software?
2
} Anyone?
} Computer programs, or the non-tangible parts of computer
Myth #1: programming is too hard
3
Too many languages: C, Java, Python, .. .. ..
Too many platforms/SDK: Linux, Windows, Eclipse, …
And things are constantly changing!
I didn’t start programming when I was 10…
Truth
4
} Is programming hard? } Yes, but much easier (and fun) to well-trained programmers } Essential skillsets
} Logical thinking } Algorithms and data-structures } Understanding of system software and hardware } Know how to type…
} Experience matters? } Yes, it matters
} But solid understanding of principles + guided practice matter more
} And it’s not late at all!
Truth
5
} Too many languages? } Key principle remain the same
} Especially if you understand compiler
} Too many platforms? } Again, key principles remain the same
} Keeps changing? } Things only change on the surface } Fundamental principles remain the same
} Example: cloud computing, caching
} “There is nothing new under the sun”
Myth #2: programming is NOT a sustainable career - so I lose my job when I am over 40
6
Truth
7
} Experience + solid foundation = invaluableness
Myth #3: programming is too easy - so a caveman can do it
8
9
Truth
10
} Hard to make it right } How to make them crash less? } How to reduce the downtime by half?
} Talk to me if you’re interested!
} Hard to make it fast } Hard to make it scale
} A facebook.com with 100 users is very different from one with 500 million users
} Require you to understand the fundamental principles!
Myth #4: if I am not interested in software, I don’t need to study programming
11
Truth
12
} Programming skill is needed in many other fields } Even if you’re into hardware design! } Even your car is running on software! } Software Defined Network (SDN)
So will studying software lead me to a promising career?
13
Software engineer is one of the best jobs
15
} FORTUNE 100 best companies to work for } #1: Google (software) } #2: SAS (software) } #6: NetApp (software) } #9: Ultimate Software (software) } 4 in top ten!
} Software engineer is the #3 ranked best job } Highly-paid } Flexibility } Less-stressful
Many research positions in Academia
16
} Software research is relevant
How do I become a great programmer (or, what courses should I take?)
17
Must-have knowledge for any programmers
18
} ECE 243: Computer Organization } Hardware basics
} ECE 244: Programming Fundamentals } C/C++: programming language for serious
programmers (and a more difficult one)
} ECE 345: Algorithms & Data Structures } Basic understanding of how to make your
program work } Basic analysis of your program’s
performance/efficiency
Becoming a great programmer
19
} ECE 344: Operating System } “The code that programmers do not have to write” } Foundation to all other programs } Hardest programs to write
} Also the likely the hardest lab assignments ever } Highly rewarding
} ECE 467: Compilers & Interpreters Programmer
int main (int x){ return x + 5; } …
Compiler 1010010010 0101101010 1010010100 1010001010 …
Machine Instructions
Becoming a programming guru
20
} ECE 454: Computer Systems Programming } How to make your program fast } How to write the fastest program for the underlying OS,
compiler, and hardware
} ECE 540: Optimizing Compilers } Advanced topics on how compilers make your program fast
} ECE 552: Computer Architecture } Advanced topics on how CPU make your program fast
Expertise in a specific area
21
} ECE 419: Distributed Systems } Make your program run in parallel might not be as easy as you think
} ECE 468: Computer Security } Hackers? Hackers!
} ECE 444/450: Software Engineering } How to manage a large software project
} CSC 343: Databases } How to store and analyze large amount of data
Final words
22
} Programming requires practice + practice + practice } Pay extra more efforts on labs!
} Don’t be afraid to get your hands dirty!