Sergey L. Bratus

VARIOUS PROGRAMMING PROJECTS:

This summarizes my larger programming projects done in the course of research, teaching and coursework while in graduate school, or connected with my Symbolic Computation research.

Symbolic Computation
Implemented share packaged for two new black box recognition algorithms for the GAP symbolic computation system ("thesis-ware"; GAP/Unix,Win32)

Implemented a package for computation in finite permutation groups (a "Rubik's cube solver") (Lisp/Unix)

Implemented a package for computation with polynomials in commuting and anti-commuting variables (Lisp/Unix)

Compiler Design
  Implemented a compiler from an ML-like language (closures, tail recursion, type deduction and mark-and-sweep GC, no patterns) into PowerPC assembly (Java/Unix,PowerPC)
Courseware for undergrad C++ courses  
Implemented a graphics/console library for student projects, on top of Win32 API, (for course projects such as clones of classic arcade games: Arkanoid, Tetris, Alien Invaders etc.) (Visual C++, Cygwin32/Windows 9x, NT)
Operating Systems,
Distributed OS
 
  Implemented multi-threading and virtual memory in a time-sharing operating system (C++/Unix)

Implemented a master/slaves task server for remote execution of tasks using RPC (C++,rpcgen/Linux)

Comp. Architecture  
  Implemented a simulation of the MIPS R4400 processor, register transfer level (C++/Unix)

TEACHING:
Algorithms and Data Structures I  
Structures, classes, and templates (C++). Abstraction and encapsulation. Dynamic arrays, stacks, queues, linked lists. Simple sorting and searching. Recursion and recursive algorithms. Elements of OO design. Final project for the class was to program a classic arcade game clone, such as Arkanoid, Tetris, Alien Invaders, etc.
Algorithms and Data Structures II  
Linked lists, trees, heaps, priority queues, and hashing. Sorting and searching: quicksort, heapsort, binary search trees etc. Design issues: picking the right data structure and implementation, memory management, generic programming with templates (C++, STL). Recursion versus explicit stack-based algorithms. Graph algorithms.
Fundamentals of Computer Science  
General idea of computer architecture and assembly programming. Basic concepts of a high-level language such as data types, variables, expressions, statements, procedures, functions etc. Basic operations with strings and arrays, input/output etc. Ideas of structured programming.
Calculus, Precalculus, Linear Algebra with Analytic Geometry  
Standard freshman and sophomore courses.

RELEVANT COURSES:
Mathematics
Commutative Algebra, Representation Theory, Lie Groups and Lie Algebras, Probability, Statistics, Real and Complex Analysis, Differential Geometry, Topology
Computer Science
Compiler Design, Operating Systems, Parallel Algorithms, Principles of Programming Languages, Distributed OS, Architecture, Object Oriented Design.