about
Home Page
08/21/2024

Code Workshop

Code repositories, stories, and Documentation.

About
click header to toggle Site Explorer
Quick Status Recent site additions As of 10/11/2024 Blog Posts Added new Posts "Disthinguished Rust" + ... Explorers Explorer pages for the Site and each of its Tracks Bits code comparisons comparisons for C++, Rust, C#, Python, and JavaScript RustPlaygroundExamples github page with code examples and RustBite refs Rust Glossary Glossary with text and code references Rust FlashCards Quick views of some important Rust types
This image
The source for this image is an SVG file generated from a photo of my desktop, using a converter application from Adobe's website .
"Good judgement comes from experience, and experience comes from bad judgement."
- Jim Horning

Jim Fawcett
Hi, I'm Jim Fawcett. I enjoy talking about and developing software. This is my site and I'm glad you stopped by. The site is intended for anyone interested in software development, especially for developers using C++, Rust, or C#. All are welcome.
Disclaimer
I am building this site to learn about things that interest me and provide reference and learning materials for others. Code here is exploratory and/or expository. I make no claims of fitness for production. I think most of what you see here is correct, clearly stated, and follows accepted idioms. The earliest material may not always be so, but I do go back to make improvements. You can help by advising me here of needed improvements.
This site is all about code: Repositories, Stories with examples, Bites that focus on language features, and bits that compare several programming languages.

1.0 Places to Start:

There are many code examples and discussions of languages here; enough that the site provides Explorers and page menus to show you what is available.
  • This Home page Explore menu links at top and bottom of this page. Home page available from all pages using Site dropdown in top menu.
  • Help Page Help on site navigation, and definition of terms. Available using Help button on top menu on all pages.
  • Site Explorer Page with left panel of ordered links to view site contents in right panel iframe. Available from Site dropdown in top menu on all pages.
  • Track Explorers Pages with ordered links to view track contents in an iframe. Available by selecting a track from top menu Tracks dropdown. Tracks are groups of pages that focus on one important topic.
  • Site Map Links to almost everything in site organized into large tables, available from Site dropdown in top menu.
Notice that all the links above open in a new tab. Most links embedded in page text open new tabs. Menu items usually open pages in the current tab. The help page is an exception. The guiding principle for that navigation behavior is this:
  • If a link leads to supplementary information then it opens a new tab for comparisons.
  • If the link navigates to new material then it opens in the current tab.

1.1 Content

Tracks and Repos, found in the top menu, organize site content into groups: Each Track opens, from the Tracks dropdown, within a Track Explorer. Explorers are pages that provide, on the left, a panel of links to track relevant content. The right is entirely consumed by the content of an iframe that displays web pages selected with links from the panel.
  • Tracks > Bits   [ show Track Explorer ]
    Opens BitsExplorer to view comparisons of five languages:
    C++, Rust, C#, Python, and JavaScript
    using code examples with explanations. This is a good place to start viewing code.
  • Tracks > C++ or Rust or C#
    Provide language stories and feature Bites. There are a lot of reference materials, demos, and exercises in these tracks.
  • Tracks > Basics, WebDev, Design, Deployment, Projects, Prototypes
    Explore areas related to software development.
Repos(itories) organize all code projects and demos from this site.
  • Repos > C++
    Opens an index into documentation pages, one for each github repository that stores and provides access to the site's C++ code. Each documentation page has a link to github code. [ show Repository Access ].
  • Repos > Rust, C# and JavaScript
    Each open to indices for code in those languages.
  • Repos > Other
    Indexes code that uses more than one language or has other specialized content.
A good way to get familiar with content is to hover over top menu items to view their dropdown lists. Another is to visit some of the links in the chart below.

Site Content by Programming Language

Bar width approximates content volume
 
Rust:
C++:
C#:
JavaScript:
Python:

Links in this chart can take you quickly into material you may not be ready for yet. It's intended to let you briefly sample content before deciding where to go.
Each link opens a new tab, so you can peek then close page to get back here.
 
Thanks to Mike Corley for many reviews and suggestions that have helped improve this site.

3.0 Intended Audience:

If you are relatively experienced with one programming language and want to learn about C++, Rust, or C# welcome aboard! Coverage of Python and JavaScript is much smaller, currently confined to the Bits Track. There are lots of details here. "Stories" and "Bites", accessed from the top menu, are designed to guide you through the learning process. Spending some part-time effort, looking at stories and code, and writing code, should help you to become reasonably fluent in about six months to a year, but you can start writing useful code much sooner than that. More experienced software developers will find relatively deep coverage of language features in the Bites, Stories, and their details dropdowns, and in code repositories.

4.0 Stories, Bites, Bits, and Repositories:

Figure 1. Stories and Bites
Many of the images and diagrams in this site are expandable. Click on the body to expand, click on the title to contract.
Much of this site's contents are "Stories", "Bites", "Bits" and "Repositories". Each of these are implemented as threads, e.g., a linked list of pages traversed with "Prev", "Next", and "Pages" menu buttons. Stories are narratives about a programming language or other technical topic. Think of them as ebooks that give a reasonably thorough presentation of topic details in a series of linked pages, one for each chapter.
Rust Story   The Rust Story consists of seven chapters, with each chapter presented on one page. For example, the Models chapter provides an overview of Rust's code structure, process for building, ownership, user-defined types and Traits, and Generics. And provides exercises and references at the end. After studying this chapter you will be able to begin writing useful code with Rust. There are other stories which you can access from the "Stories" dropdown in the top menu, and can also be reached from links in the SiteMap.
A Bite is a single web page focused on one feature of a language or platform. Bites are linked into a thread using Prev and Next links, so the thread covers important parts of its parent story and is easily navigated. Rust Bites Rust Bites divide each story chapter into a few Bites, each focused on an important topic in the chapter, and linked together. For example the Data bite covers operations: bind, copy, borrow, move, clone, and mutate, with conclusions and exercises at the end. Bytes provide more details or a different point of view than the story chapter, so that makes an expanded narrative from easy to digest pieces. There are Bites for most of the Tracks, accessible from the "Tracks" dropdown in the top menu and from the SiteMap. Bits are relatively small compilable codes written in several languages: C++, Rust, C#, Python, and JavaScript. Bits allow you to compare two languages by comparing their code fragments and resulting outputs. Code Bits Bits provide step-by-step instructions for setting up tool chains for building, running, and debugging code in each of the languages. They also provide levels of code examples, for each of the languages, that help you understand the language type systems, user-defined types, and common operations. For example, Bits_DataRust and Bits_DataCpp. Repositories are containers for code and documentation, available from the "Repos" drop-down on the top menu. There are repository collections for C++, Rust, C#, JavaScript, and Other. Each member of a collection is a documentation webpage that links to a github repository containing code.
Rust Repositories The Rust collection contains tools, components, libraries, projects, and demos. For example, the components contain a repository for a thread pool written in Rust. You will find many small C++ and Rust demonstration programs in the "Dems" drop-downs. All of the curated code is available from the "Repos" dropdown in the top menu.
Most repositories have a documentation web page that discusses its code and links to a github repository with the code. Essentially, repositories in this site are proxies for the actual code in a github repository. We've used Rust for these examples because Rust is the only language for which we have all three: Story, Bites, and Repositories. C++ has a story and Repositories. For C# there are only a few repositories. Eventually I expect that all three will have all of these things.
Languages Content
This site focuses on three programming languages: C++, Rust, and C#, with emphesis on the first two. Content tracks are provided, from the top menu, for basic background information, and for each of the three languages. Both C++ and Rust are important system programming languages that compile to native code. They give you tools to build quick and reliable systems and user applications. Rust provides reliability with compiler enforcements. C++ does that with conventions and helper types. C# is a managed language, deeply integrated with the dotnet framework and, like C++ and Rust, can run on Windows, Linux, and MacOS. At this time, C# coverage in this site is shallow, consisting of several code repositories. Eventually that will be augmented by a C# Story and Bites.

Table 1. - Language Tracks

Track Content Comments
Basics Platforms, Programming, and Object Models Background information needed to develop code effectively
C++ primitives, functions, classes, relationships, templates Source compiles to native code, good performance, safe by convention using library tools
Rust primitives, mutation, copy, move, structs, generics, safety Compiles to native code, good performance, safe by construction through compiler enforcements
C# primitives, classes, generics, garbage collection Source compiles to bitecode, jitted to native at run-time, memory safe by construction
The tracks provide information suitable for developers, for reference or to start learning about one of these languages. Stories and Bites cover most of the features of C++ and Rust, and materials for C# are being developed too. Discussions are quite complete, but accompanied with diagrams and code examples to make the learning process fairly painless. There are also coding exercises at the end of most story chapters and many of the Bites.

5.0 Purpose:

There are two purposes for building this site: to house and dispense an organized collection of software and to explore techniques for building web sites tuned to software content.

5.1 Migrate teaching code and add newly developed resources

While teaching graduate software design courses at Syracuse University I developed a website containing lectures, solutions for midterm exams, project specifications, and a lot of sample code. SU Site The original SU site organizes material for graduate Computer Engineering courses I taught from 1991 to 2019. It is structured by course and student interests with lots of student pictures. All the course contents: syllabus, lecture content, and assignments are accessible by clicking the "Courses" top menu item. This includes content for: Here are pictures of students from my classes and from my research team: I retired in 2019 and have since been working mostly with the Rust language, but also in C++, with a little Python and C# thrown in. That work is featured in Tracks developed for this new site.

5.2 Experiment with Web Display Techniques

The second purpose is to experiment with ways to present code, diagrams, text discussion, images and charts. All vie for page real estate and what is most important to a user may vary over time. So the site needs to manage size and placement in ways that gracefully evolve with user actions and viewport size. Site design is concerned with how to provide quick access to important code fragments as well as an entire product with multiple packages, how to balance browser view space between non-trivial text descriptions, code examples, diagrams, and images, and how to provide intuitive navigation through large collections of code and resources. If you wish to provide constructive feedback about this site, visit Website Repository and click on the New discussion tab.

6.0 Other Resources

The Rust community has crafted a number of high quality ebooks and web pages. Here are three that are especially effective. Rust Cheat Sheet Tour of Rust Rust - The Book Some parts of this site have broader focus than a single language. Basic Bites introduces simple models for platform, program, and object behaviors. Idioms & Patterns compares small code examples written in C++, Rust, and C#. Tooling helps you get started with language tools so you can start building code quickly. Finally, Software Development deals with the engineering side of project construction. Basic Bites Tooling for C++, Rust, C# Software Dev: Design Software Dev: UML
There are a lot of programming and language reference materials here. For now, language references focus on C++ and Rust, but eventually the site may add references for C#, and a few other languages. Here are places to look for language support:
  • Resources "Resrcs" dropdown menu in the top menu bar.
  • The Stories dropdown has C++ and Rust story tutorials. Eventually there will be other language stories as well.
  • The C++ Repositories have a lot of C++ code examples and projects.
  • The Rust Repositories are now acquiring code examples and projects.
  • SiteMap links to most of the resources in this site.
Interesting links Check out Interesting Links for technical commentary that relates to things in this site and a few other things I find interesting.
You will find more information about the site goals, design, and status in  SiteDesign.html.
Repository home: https://github.com/JimFawcett
Syracuse University website: https://ecs.syr.edu/faculty/fawcett
Feedback
Your constructive comments and suggestions are welcome. You can provide those here. I'm especially interested in:
  • What you liked and did not like about the site
  • Is site navigation obvious and easy to use?
  • Which of the discussions are too complex or too simple?
  • Are the provided materials: Stories, Bites, Code, .. interesting?
  • Did you find the site attractive
  • Is it easy to use the SiteMap, access Stories and Bites, and use the site widgets (expanding images, badges)?

  Next Prev Pages Sections About Keys