Orthogonal Frequency Division Multiplexing (OFDM) with dynamic scheduling and resource allocation is widely considered to be a key component of 4G cellular networks. However, scheduling and resource allocation in an OFDM system is complicated, especially in the uplink due to two reasons: (1) the discrete nature of channel assignments, and (2) the heterogeneity of the users' channel conditions, individual resource constraints and application requirements. We approach this problem using a gradient-based scheduling framework presented in previous work. Physical layer resources (bandwidth and power) are allocated to maximize the projection onto the gradient of a total system utility function which models application-layer Quality of Service (QoS). This is formulated as a convex optimization problem. We present an optimal solution using a dual decomposition. This solution has prohibitively high computational complexity but reveals guiding principles that we use to generate a family of lower complexity sub-optimal algorithms. We compare the performance of these algorithms via a realistic OFDM simulator.