Welcome to CPS 3525
The full-stack software engineer role is a high-paying, in-demand position across various industries. It requires expertise in software development and system integration, spanning front-end, back-end, and middleware technologies. This course is designed to train students in foundational and advanced programming skills with a focus on the Linux environment. Students will gain proficiency in back-end development using Java, C++ and scripting languages, as well as front-end development with HTML and CGI scripting.
The course will also cover the basics of the Linux operating system, providing students with a solid foundation for software development in a Linux environment. Students will gain practical knowledge of how compiled and interpreted languages function as back-end pipeline processes on Linux systems, integrating with front-end interfaces. Comprehensive training will be provided to address diverse coding challenges through hands-on exercises and assignments, designed to reinforce both theoretical understanding and practical application of the concepts covered.
If you don't enjoy coding and debugging, please do not take this course.
We will cover the following topics:
- Install Virtual Machine and a Linux system
- Basic Unix system administration
- Unix shell environment and commands
- Filesystem, inode
- Editor - vi
- GitHub, git commands
- Process states, process suspension, fore/background, nohup, timeout
- Standard input, output, error, redirect, pipeline
- Cron job and scheduler environment
- Web technology, 3-tier architecture, client/server
- HTML, CGI, integrate front-end and back-end programs
- Interpreter (Script) languages: Shell, PHP, Python, file I/O, cgi
- Compiled languages: refresh basic Java, Object-Oriented Design, file I/O, cgi
- Compiled languages: C++, struct, dynamic array, pointer, address, memory allocation, call by value/reference/address, file I/O, Object-Oriented Programming, cgi
- Exception handlings
- Compile, execute and debug PHP, C++ and Java programs on Linux
- Debugger: gdb, jdb
- JSON format
- Recursion - flood fill Algorithm (4 directions)
- Web programming: upload files, detect client information, pass client's IP to other websites through APIs on the Internet and process/display the returned results
- Programming on Linux: call external programs, pass and received command line arguments, email notification
- Software development lifecycle, roles, and case study
Prerequisite
For CS students: CPS 2232 (Data Structures) with grade C and above. IT students will need special permission after passing CPS 2240 (IT Data Structures) with grade B+ and above.
Note: This course is available only in the spring semester.
Instructor: Dr. Ching-yu (Austin) Huang
Class information:
- All the class materials (syllabus, slides, assignments, tools) are posted on the class Google drive. Students must use the Kean email account to access the folder.
- Students can access the latest syllabus here.
- This is a hands-on course. Students are required to bring a personal laptop to every class.
- Assignments should be based on a Linux server that is announced on the first day of the class.
- Instructional Methods: lecture with slides, class discussions and exercises, and project creations.
- Course grading: 3 exams: Midterm 1, Midterm 2, Final (150, 150, 200 pts), 3 projects (150, 150, 200 pts)
- Grading policy: Total 1000 points.
A: >=940, A-: 939-890, B+: 889-840, B: 839-800, B-: 799-760, C+: 759-720, C: 719-680, D: 679-640, F: below 640
(C or better is needed for CS and IT majors.)
CPS 3525 Course Description
This course covers three main components. 1). Explore basic Unix/Linux operating system concepts, commands, filesystem, processes, environment variables, scheduling, and tools. 2). Design and develop automated applications using script and compiler languages in a Linux system. 3). Integrate programs on Linux with web interfaces and applications. This course emphasizes both concepts and hands-on lab exercises.
Student Learning Outcomes
Upon completion of this course, the student will be able to:
- Explain and demonstrate the Unix/Linux commands, processes, utilities, and tools.
- Utilize script and compiler languages to write applications in a Unix/Linux system.
- Design and develop automated programs in a Unix/Linux system.
- Develop and integrate web applications with programs with Unix/Linux.
Books and resources
Requirements - Students will need the followings to do exercsies and assignments:
- Students will need an account on obi.kean.edu (a Linux server). The instructor will create the accounts so students can do exercises and assignments from the first day of class.
- Students will need the following tools to connect to a Linux server. hostname: obi.kean.edu, port: 22, protocol: ssh
Windows: Use "PuTTY" software to connect to the Linux server. You can download putty from http://www.putty.org/
Mac: Use "terminal" software. Please refer to this tutorial.
- FileZilla-Client to transfer files between the Linux server and your desktop/laptop. You can download FileZilla-Client at
https://filezilla-project.org/download.php?type=client
The hostname and port # is the same as above. Protocol should be "sftp". The logon type should be "normal". You need to enter the user login and password.
- A good text editor: sublime, visual studeio code, or others. You can download sublime at https://www.sublimetext.com/3
- Familiar with the Linux vim editor on the command-line. Please refer these tutoirals - vim 101 for beginners, vi (vim) online tutorial
- Create public_html and CPS3525 folders under your home directory on obi.kean.edu, and set proper permission for the folders and files. Please refer to this yoda web page procedures
- Practice these basic Unix commands: cd, ls -la, more, pwd, mkdir, rm, mv, cp, chmod, etc. Please
refer to this Unix command document.
Other advanced Unix commadns will be covered in the lectures.
- Download and install VirtualBox - a Virtual Machine running on your PC.
Tutorial to install VirtualBox
- Download and install a Linux server on your VirtualBox, either Fedora, or Ubuntu. Please download the server version, NOT the workstation version.
Tutoral to install Linux system
In addition to the written exams, this course requires students to implement 3 projects to integrate the pipeline processes of front-end browser and back-end programs on Linux in different lanaguages. Below are just examples.
- Exercises
- test 1, call a C++ program, print client's information (IP, browser, OS, port)
- test 2, call a C++ program using the GET method to pass two input numbers and print sum
- test 3, call a C++ program and pass several HTML inputs, and print the results on the browser
- test 4, call a C++ program to process an uploaded file
- Project 1 - Integration of front-end and back-end programs to validate the URL inputs. HTML FORM & cgi, C++
- Project 2 - Integration of front-end and back-end programs to process to recognize/compare the input objects from web and upload file. HTML FORM & cgi, C++ & file I/O, recursion
- Project 3 - team project on a selected topic using C++