Computer Science Skillsets I Am Focusing On
- Skillset 1: Software Engineering
- Programming Languages [1] [2]
- Software Engineering skills, tools and processes [3] [4] [5] [6]
- Skillset 2: Theory & Algorithms
- Theoretical Computer Science
- Algorithms [1] [2]
- Data Structures
- Language, Automata & Discrete Mathematics
- Computational Science & Engineering
- Skillset 3: Systems
- Systems Programming
- Computer Security
- Database: RBBMS and NoSQLs
- Cloud and Mobile Development [1] [2]
- Parallel, Multicore and Concurrent Programming [3]
- Networked and Distributed Systems Programming [4] [5] [6] [7]
- Skillset 4: Intelligence & Data
- Machine Learning [1]
- Data Science & Analytics, Big Data
- Artificial Intelligence [2]
- Skillset 5: Physical Digital [1] [5]
- Robotics & Manufacturing [2] [3] [4] [6]
- Internet Of Things
- Skillset 6: Info Bio
- Computational Biology & Bioinformatics
- Systems BIology [1]
- Skillset 7: Interactive Computing
- Education [1] [2]
- Wikinomics [3] [4]
What is the least you need to know so that you can develop any software?
Programming language: structure the main syntactic elements
Algorithms and Data Structures
- Structure all the data structures
Software Development, OOA&D, Design Patterns, Functional Programming, Software Engineering Tools
Can you develop prototypes from scratch?
Master existing systems - interacting with them, their internals, how they could be made to work better.
Compilers
Operating Systems
Database: Relational, NoSQL
Networking
Parallel & Distributed Computing
Computer Architecture
Machine Learning
Language Processing
Multicore, Networked & Distributed Programming
How do you make developers orders of magnitude (say 100 times) more productive?
How do you develop software so that they have less bugs?
- Support for Abstractions, Components in language
- Start with Scala DSL, Clojure Macros, and Code generation (from XML / DSL - synchronization with code, CLI / Interpreter).
- Library, Framework, Plugin, Middleware, Reusable infrastructure (e.g., Akka)
- Classify, Categorize all the different bugs, Test Driven Design
Programming Language Paradigms
- Imperative, State (Memory) manipulation based, Assignment oriented Programming Language
- Functional Programming Language
- Object Oriented Programming Language
- Rule-based, Logic-based Programming Language
Most languages have hybrid philosophy.
Scala - Object Functional Programming Language
Blogposts
- Functional Programming
- What makes Clojure different
- Scala
- Dependency Injection
- Parallel Programming Models
Concurrent Programming Models
Parallel Programming: Multiple-processor or multicore programming
Concurrent Programming: Multithreaded programming
Concurrent Programming Models:
- Threads and lock-based Synchronization
- Java
- Functional programming model
- Pure Functions with no side-effects + Immutable Data Structures
- STM (Software Transactional Memory)
- Clojure
- Actor based message passing
- Scala
- Erlang
- Clojure
- Channel based message passing:
- Go
- Unix processes-pipes
- Non-blocking I/O or asynchronous I/O
- Callback Functions
- Node.JS: Event driven programming and Callback Functions.
Programming Language
Components, Composition of Components, Parameterization
Functional Programming
First class functions
which means functions are first-class citizens.
- functions can be assigned to variables
- functions can be stored in data structures
- functions can be passed to functions as arguments
- functions can be returned from functions
Pure functions without any side-effect
- Functions take values as parameters and return values.
- No global or mutable state.
What do these two features lead to
- Localized thinking space
- Localized testing
- Control abstraction with higher order functions
- More readable & shorter code
- Higher order Functions leads to less branches and assignments, which in turn leads to readable, shorter code.
- Data abstraction with closures
- Concurrency - immutable data structures
- Simplifies programming; No need for complicated OO Design Patterns, which are required to solve problems that OO introduces.
- Higher order Functions, Composition of function at runtime, Function Types, Anonymous Functions / Function literals, Partial Functions, Currying,
- Distributed programming - map-reduce
- Loose coupling?
- Reusable? Replaceable components?
- Flexible? Extendable?
- Real world modeling? Functions take in data, and return data
- Recursion. Memoization. Dynamic Programming. Immutability.
- Monads
- Pattern Matching
(OOP - interacting objects)
Function returning output”s”?
C++ Function pointers, function objects
Scalable Web Applications
Mobile (HTML5)
Cloud (Big Data, NoSQL)
Social
Security
Programming Languages I Am Learning / Working With
Language - Why
C/C++ - Systems Programming. Efficiency.
Go - Systems, Concurrent and Networked Programming. Static Typing. Faster compilation.
Java - Managed Code. Android Development. Open Source Libraries and Frameworks.
Scala - A blend of all the features you saw in different languages. OOP and Functional Programming on JVM. Static Typing. Terse syntax.
Clojure - Lisp Features on JVM. Metaprogramming (Programmable Language). Parallel Programming.
Python - Rapid Development. Open Source Libraries and Frameworks.
JavaScript - Web Front-end. Object-based Programming. Node.JS.
R - Statistical, Numerical Computing
Haskell - Pure Functional Programming
Erlang - Fault tolerant Parallel Distributed Programming
Language philosophy
Language features - Sentences, Control, Abstractions
C/C++
Memory manipulation. Writing Systems Software. Efficiency.
Generic Programming.
Figure out how STL is implemented so that you can implement on your own.
Boost Library.
Virtualization
Computer Security
Physical Digital
- Systems, Linux, Drivers, Modules, Android,
- Image Processing, Computer Vision; Signal Processing; Robotics; Machine Learning; Knowledge Representation, Probabilistic Agents, Planning; Semantic Web, Networking;
- Computer Architecture, Microprocessor; Arduino / Raspberry
- Sensors
- MEMS
- Electronics; Control Engineering; Machines;
- Security
- Physics
Scala
- Akka
- Play
- Spray
- Spark, Spark Streaming, MLlib, GraphX, Shark
- Storm
- Scalaz
- Lift
- Stratosphere
Clojure
- Incanter
- Ring, Compojure
- core.logic
OOAD
OO Design Patterns:
- Strategy
- Factory
- Dependency Injection
- Publisher-subscriber
- Service Oriented Architecture
Cross Language Development
- Thrift
- JVM
Java
Java Language & Standard Library:
- Language features: Class, Object; Garbage Collection; Inheritance, Polymorphism, Interface; Nested Type; Package; Assertion; Annotation; Generics; Enum; Exception
- Data Manipulation API: Math; Random number; BigDecimal; BigInteger; Geometry; String, Character, Regular Expression; Primitive Wrapper; Array; Collections; XML Processing;
- Development API: Internationalization; Preferences; References; Reflections; JMX
- Systems and Network Programming API: System; GUI, Swing, AWT; Threading (Thread & Lock); Concurrency; Networking - Protocols; Servlet, JSP; Web Services; File; JDBC;
Java Vital Techniques:
- Concurrency
- Dependency Injection, IoC
- AOP
- AspectJ
- Modular Java
- OSGi
- Classfiles & Bytecodes
- Performance Tuning
Java Libraries & Frameworks
- Spring
- Android
- Play
- Hadoop
Java Software Development Tools:
- Automation; Increased productivity
- Testing
- Unit Testing
- JUnit
- Integration, Functional, Load, Performance Testing
- Build
- Maven
- Continuous Integration
- Jenkins
- Version Control:
- Git
- Quality Metrics
- Issue Management
- Bugzilla
- Technical Documentation Tools
Java Standard Library
- String Handling: String, StringBuilder, StringBuffer, String.split() (StringTokenizer), Text, Character, Pattern, Matcher
- Collections: Map, List, PriorityQueue, Set, Queue, Arrays, Collections,
- Math: Math, BigInteger, BigDecimal,
- I/O: Scanner, File,
- Exception Handling:
Mobile Development
- Android Application Development
- Android Internals
- Mobile Web
JavaScript
- jQuery
- Bootstrap
- AngularJS
- Node.JS
HTML5
CSS3
Multicore, Parallel, Networked & Distributed Programming
Parallel Programming
- GPU Programming
Cloud Computing
- Google App Engine
- OpenStack
- AWS: Basics
Network Programming
Protocols:
- TCP, UDP; TLS, SSL; HTTP, SMTP, POP, IMAP, FTP; RMI;
Server Architecture
Web Framework:
- Django
- Spring MVC
- Play
- Ring, Compojure
Scaling Internet Applications:
- Cache
- Memcached
- Message Queue
- AMPQ
- RabbitMQ
- Task Queue
- Celery
- Mapreduce
- Hadoop
Virtualization
Distributed Data Processing Framework
- Mapreduce Framework
- Apache Hadoop
- Hadoop Family Projects
- YARN
- Hive
- Pig
- HBase
- Sqoop (Hadoop<data>RDBMS)
- Zookeeper
- Impala
- Accumulo
- Bulk Synchronous Parallel Model
- Apache Hama
- Pregel
- Apache Giraph
- Bulk Synchronous Parallel Computations for processing Graphs
- Stratosphere
- Spark
- Spark Streaming, MLlib, GraphX, Shark
- Storm
- Percolator
- Dremel
Artificial Intelligence
- Language Processing
- Statistical
- Information Retrieval & Web Search
- Lucene, Nutch, Solr
- Information Extraction
- Natural
- Parsing
- Adversarial Search
- Constraint Satisfaction
- First Order Logic
- Planning
- Probabilistic Models: Bayes, Markov
Data Science & Analytics
Data Mining
- Data Warehouse & OLAP
- ETL
Big Data
- Hadoop
Machine Learning
- Inductive Learning
- Decision Tree
- Ensemble Learning
- Statistical Learning
- Bayes
- Neural Network
- Deep Learning
- SVM
- Knowledge Based Learning
- Explanation Based
- Relevance Based
- Inductive Logic Programming
- Reinforcement Learning
- Computational Learning Theory
- Machine Learning Library
- Mahout
- scikit-learn
Numerical Algorithm
Database
RDBMS:
- MySQL
- SQLite
NoSQL:
- Mongodb (Document-oriented)
- Couchdb (Document-oriented)
- Cassandra (Distributed)
- Redis (In-memory)
- Riak (Dynamo, key-value)
- HBase (Bigtable)
- Neo4j (Graph)
- Semantic Web, linked data
Operating system (& Computer Architecture)
- Linux
- Loadable kernel modules
- Device Drivers <> Peripherals and Interfacing
- Android Internals
Algorithms and Data Structures
Data Structures
- Structure all the data structures
- Linear: Stack, Queue, Linked List, Heap, Binary Indexed Tree, RMQ
- Tabular: Hashtable
- Non-Linear: Rooted Trees, Binary Search Trees, Red-Black Trees, B-Trees
Algorithms
- Computational Complexity
- Dynamic Programming
- Graph Algorithms
- BFS
- DFS
- Topological Sorting
- Strongly Connected Components
- Minimum Spanning Tree
- Prim
- Kruskal
- Single source shortest Path
- Dijkstra
- All Pairs Shortest Paths
- Floyd Warshall
- Maximum Flow
- Maximum Bipartite Matching
- Backtracking
- Greedy Algorithms
- Divide & Conquer
- Number Theoretic Algorithms
- Computational Geometry
- Matrix Algorithms
- Algorithmic Game Theory
- Linear Programming
- Topcoder Algorithm Tutorials
Mathematics & Theory
- Combinatorics
- Probability
- Number Theory
- Linear Algebra
- Graph Theory
- Automata Theory
Software Engineering
Processes:
- Agile
Tools:
- Automation, Increased productivity
- Testing
- Unit Testing
- Integration, Functional, Load, Performance Testing
- Build & Continuous Integration
- Maven
- Version Control:
- Git
- Quality Metrics
- Issue Management
Computer Architecture
- Special purpose processors: GPU, DSP, SIMD, FPGA
References
No comments:
Post a Comment