about
Home Page
10/16/2024
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.
None of the texts or codes displayed in this site have been generated by AI assistants. I have used
ChatGPT to discover bits of syntax that are not well documented and to help debug small bits of
code, especially for JavaScript that implements much of the user functionality of the site.
Also, ChatGPT has proven useful for generating regular expressions and listing all the options
for terminal commands.
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.
-
Blogs
Pages each focused on a specific language feature or design concept.
At this time, most illustrate important aspects of Rust.
-
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, Repos, and Blogs, 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++
[ show Repository Access ].
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.
-
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.
Blogs organize important ideas about languages and software development.
Blogs > Distinguishing Rust, Rust Safety, ...
[ show Blog List ].
Blogs are relatively self-contained and focus on an important language or process feature.
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.
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)?
bottom
resrcs
experim
SU site
purpose
stories
audience
proglang
content
start
top